Вопросы программирования на Free Pascal, использования компилятора и утилит.
Модератор: Модераторы
Padre_Mortius
энтузиаст
Сообщения: 1265 Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб
Сообщение
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;
Это фича или баг?
Brainenjii
энтузиаст
Сообщения: 1351 Зарегистрирован: 10.05.2007 00:04:46
Сообщение
Brainenjii » 06.10.2007 15:50:25
а как достающий из потока иначе узнает длинну извлекаемой строки ?
Padre_Mortius
энтузиаст
Сообщения: 1265 Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб
Сообщение
Padre_Mortius » 06.10.2007 15:56:54
Об этом я как раз и не подумал. Но в тоже самое время если я пишу в файл информацию типа лога, которая должна быть визуальна (текстовая информация), то первые 4 байта немного мозолят глаза
Brainenjii
энтузиаст
Сообщения: 1351 Зарегистрирован: 10.05.2007 00:04:46
Сообщение
Brainenjii » 06.10.2007 16:13:51
Если там только текст, то может TStringList лучше ?
v-t-l
энтузиаст
Сообщения: 745 Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus
Сообщение
v-t-l » 06.10.2007 16:23:54
Padre_Mortius
энтузиаст
Сообщения: 1265 Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб
Сообщение
Padre_Mortius » 06.10.2007 16:35:14
to v-t-l
Данный вариант уж был опробован. Результат = двоичные данные в файле.
А правильным вариантом является
Padre_Mortius
энтузиаст
Сообщения: 1265 Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб
Сообщение
Padre_Mortius » 06.10.2007 16:43:28
Brainenjii писал(а): Если там только текст, то может TStringList лучше ?
Не проще. Держать в памяти компьютера несколько десятков тысяч строк лога (которые можно потерять в случае ошибки) или просто добавить запись в файл.
Attid
долгожитель
Сообщения: 2589 Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:
Сообщение
Attid » 06.10.2007 17:13:39
Padre_Mortius
в файл проще writeln сделать