Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.09.16;
Скачать: [xml.tar.bz2];

Вниз

Сохранить большой объем текстовых данных в файл   Найти похожие ветки 

 
BDRON   (2002-09-05 08:03) [0]

Подскажите, как можно сохранить данные объемом более 64 кб в файл. Операторы writeln и writestring выдают ошибку после того как файл становиться более 64 кб.


 
MBo   (2002-09-05 08:12) [1]

не замечал...


 
Петров Денис   (2002-09-05 10:15) [2]

Использовать класс TFileStream (бинарного потокового ввода-вывода в файлы). Здесь нет ограничения на размер файла, а вся информация записывается и считывается в двоичном виде (что для вывода символов аналогично обычной операции типа "writeln", только выводить надо не паскалевскую строку, а null-terminated string, которую в Паскале обозвали PChar). А код будет выглядеть примерно так:

...
var S: TFileStream;
Data: PChar;
...
begin
...
S := TFileStream.Create("large_text.txt", fmCreate);
{ выделяем память под строку }
Data := StrAlloc(Length("sample string...") + 1);
{ заполняем строку данными }
StrCopy(Data, "sample string...");
{ выводим строку в файл }
S.WriteBuffer(Data^, Length(Data) + 1);
S.Free;
...
end;

Немного о функции WriteBuffer. Она пытается записать в поток то количество байт из буфера (на который указывает ее первый параметр), которое задано вторым ее параметром. Если это невозможно, то генерируется исключение. Так что ее лучше использовать в блоке try...except. Если это не удобно, то лучше пользоваться функцией Write. Спецификация у нее та же, но она пишет в поток столько байт, сколько возможно, и возвращает число записанных байт в точку вызова (не генерируя исключение в случае неполной записи данных в поток).


 
MBo   (2002-09-05 10:20) [3]

>BDRON
Кстати, writestring наводит на мысль об ini-файле, а они действительно в Win9X ограничены 64К


 
Lord Raul   (2002-09-05 10:22) [4]

На мой взгляд эту проблему можно решить несколько проще, используя BlockRead/BlockWrite.


 
AndreyS   (2002-09-05 11:19) [5]

Если нужно просто вывести вычисленные цифры с коментариями (форматный вывод) без наворотов,
тоя я делаю очень просто. Так как процедура writeln имеет некоторые особенности,
то я ее не использую, а использую write и в конец записи в ней дописываю явно символ конца
стороки и перевода каретки (Chr(13), Chr(10)). Это спасает от некоторых неудобств в некоторых
случаях и весьма уневерсально (не зависит от изменений вносимых от версии к версии) и
просто есть наглядный конроль над строками файла. Можете файл размером в диск создать и
ничего не будет. Возможно, это примитивно, но зато очень универсально и просто.
Если речь идет не о текстовом файле есть другие методы.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.09.16;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.006 c
6-50888
[nex] aka Counterfeiter
2002-07-12 01:02
2002.09.16
ServerSocket nonBlockingThread


3-50651
Gesser
2002-08-25 18:06
2002.09.16
MDB(access), связаны 2 табл, обновление в Delphi не проиходит


3-50598
Oleg_EM
2002-08-22 10:36
2002.09.16
При выполнении запроса I/O error for file


1-50786
pavit
2002-09-03 12:54
2002.09.16
Как определить что мышь ушла за пределы компонента


8-50869
Oduvan
2002-05-17 15:10
2002.09.16
Как определить что файл является иконкой или BitMap?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский