Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.09.16;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.01 c
6-50907
Dr.Freddy/
2002-07-10 07:38
2002.09.16
Чат: быстрое имя


1-50788
Zum
2002-09-03 14:35
2002.09.16
Прога


1-50859
d_oleg
2002-09-04 17:12
2002.09.16
TWinControl - запрет перерисовки


6-50889
ANM
2002-07-10 22:46
2002.09.16
PHP из Дельфей


14-50980
Футбол
2002-08-22 11:28
2002.09.16
Что вы думаете по поводу поступка Сычева?