Использование TStream.WriteAnsiString

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Использование TStream.WriteAnsiString

Сообщение Padre_Mortius » 06.10.2007 15:44:45

Почему или для чего при записи строки в файл через поток Stream в начале строки всегда пишется ее длина?

Код приведен из модуля streams.inc

Код: Выделить всё
Procedure TStream.WriteAnsiString (S : String);

  Var L : Longint;

  begin
    L:=Length(S);
    WriteBuffer (L,SizeOf(L));
    WriteBuffer (Pointer(S)^,L);
  end;


Это фича или баг?
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Сообщение Brainenjii » 06.10.2007 15:50:25

а как достающий из потока иначе узнает длинну извлекаемой строки ?
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Сообщение Padre_Mortius » 06.10.2007 15:56:54

Об этом я как раз и не подумал. Но в тоже самое время если я пишу в файл информацию типа лога, которая должна быть визуальна (текстовая информация), то первые 4 байта немного мозолят глаза
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Сообщение Brainenjii » 06.10.2007 16:13:51

Если там только текст, то может TStringList лучше ?
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Сообщение v-t-l » 06.10.2007 16:23:54

Или сразу
Код: Выделить всё
Stream.WriteBuffer(PChar(S),Length(S))
v-t-l
энтузиаст
 
Сообщения: 740
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Сообщение Padre_Mortius » 06.10.2007 16:35:14

to v-t-l

Данный вариант уж был опробован. Результат = двоичные данные в файле.

А правильным вариантом является

Код: Выделить всё
Stream.WriteBuffer(Pointer(S)^, Length(S))
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Сообщение Padre_Mortius » 06.10.2007 16:43:28

Brainenjii писал(а):Если там только текст, то может TStringList лучше ?


Не проще. Держать в памяти компьютера несколько десятков тысяч строк лога (которые можно потерять в случае ошибки) или просто добавить запись в файл.
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Сообщение Attid » 06.10.2007 17:13:39

Padre_Mortius
в файл проще writeln сделать
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2586
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7

Рейтинг@Mail.ru