![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Запись в файл переменной типа string. [D4, Win95/98]
Fredericco © (2002-09-27 11:12:00)Привет уважаемые мастера!
У меня вот такой вопрос. Есть рекорд
TMyRec=record
I:integer;
S:String[255];
end;
и файл
F:File of TMyRec;
Данная структура не может быть записана в файл если не указать длину строкиS. Так вот, кто уже с этим сталкивался, подскажите пожалуйста как правильней всего записывать строки большей длины.
С уважением к Мастерам.
Fredericco.
Fredericco (2002-09-27 14:17:00) [21]>Anatoly Podgoretsky
>Alx2
Новости подробного чтения:
> Данная структура не может быть записана в файл если не указать
> длину строки S
MBo (2002-09-27 14:16:00) [22]>Anatoly Podgoretsky
>Alx2
Новости телепатии:
Тот тип, который он привел, у него записывается, а если убирает [255] - тогда нет. Вот что он имел в виду
Anatoly Podgoretsky (2002-09-27 14:14:00) [23]Я не из головы беру, откомпилировано без единого предупреждения и выполнено без единой ошибки, файл как и ожидалось оказался ровно 260 байт и строго нужного содержания.
У тебя яно не тот код, который приведен в сообщении Fredericco © (27.09.02 11:12)
Естественно не было нужды делать пратическую проверку, это только для тебя, что бы ты не мог утверждаать, мол проверь сначала.
Fredericco (2002-09-27 14:10:00) [24]2Alx2 © (27.09.02 14:03)
Прчти внимательней вопрос:
> Данная структура не может быть записана в файл если не указать
> длину строки S
То бишь:
TMyRec=record
I:integer;
S:String; // Не указав длину строки
end;
Fredericco (2002-09-27 14:05:00) [25]2Alx2 © (27.09.02 14:03)
Может потому что у меня D4.
Alx2 (2002-09-27 14:03:00) [26]>Fredericco © (27.09.02 14:02)
Что то очень странное творится в королевстве датском :)
Fredericco (2002-09-27 14:03:00) [27]2MBo © (27.09.02 14:00)
Спасибо большое!
Fredericco (2002-09-27 14:02:00) [28]2Anatoly Podgoretsky © (27.09.02 13:58)
Уверен. Только что проверил в новом проекте.
[Error] Unit1.pas(107): Type "TMyRec" needs finalization - not allowed in file type
[Fatal Error] Project1.dpr(5): Could not compile used unit "Unit1.pas"
MBo (2002-09-27 14:00:00) [29]FS.write(Rec.I, SizeOf(rec.I));
L:=Length(rec.s);
FS.write(L, SizeOf(L));
Fs.Write(rec.s[1],L);
...
fs.read(rec.i,SizeOf(rec.I));
fs.read(L,sizeof(Integer));
SetLength(rec.s,L);
Fs.read(rec.s[1],L);
Alx2 (2002-09-27 13:59:00) [30]у меня такая конструкция проходит (D5 & D6)
type
TMyRec=record
I:integer;
S:String[255];
end;
Var f : file of tmyrec;
:)
Если D4 таки упрямится (что вряд ли), то попробуй
type
TStrArray = array [0..255] of char;
TMyRec=record
I:integer;
S:TStrArray;
end;
Var f : file of tmyrec;
а при работе использовать приведение типов
но имхо неэкономны файлы такого типа.
Anatoly Podgoretsky (2002-09-27 13:58:00) [31]Ты уверен, что ты записываешь именно эту структуру, эту можно, а про другие надо отдельно говорить.
Fredericco (2002-09-27 13:49:00) [32]2Anatoly Podgoretsky © (27.09.02 11:22)
[Error] Unit1.pas(103): Type "TDriver" needs finalization - not allowed in file type
[Fatal Error] Project1.dpr(5): Could not compile used unit "Unit1.pas"
2MBo © (27.09.02 12:43)
Расскажи пожалуйста, если не трудно, как организовать чтение/записьMyRecчерез TFileStream, а то я сам не разобрался.
MBo (2002-09-27 12:43:00) [33]если в записи длинные строки или дин.массивы, File of TMyRec не пойдет, используй TFilestream, перед строкой записывая ее длину
Anatoly Podgoretsky (2002-09-27 11:22:00) [34]Данная структура может быть записана в файл без указания длины строки S