![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
в Delphi 2010 пытаюсь записать строковую переменную St типа String состоящую из 30 символов в файл так:
BlockWrite (F,St,SizeOf(string)), но при этом в файл зписывается всего 4 байта. При чтении записанного файла с помощью BlockRead(F,St,SizeOf(string)) содержимое St получается пустым (""). Подскажите пожалуйста в чём дело? |
|
#2
|
||||
|
||||
|
Причём тут SizeOf? Length.
SizeOf даёт длину указателя на строку, как раз 4 байта. |
|
#3
|
|||
|
|||
|
значит должно быть BlockWrite(F,St,Length(St)) ?
|
|
#4
|
||||
|
||||
|
Код:
Write(F, St); |
|
#5
|
|||
|
|||
|
Length вместо SizeOf в BlockWrite/BlockRead использовать для всех типов переменных? Странно. Я всегда до встречи со String ставил SizeOf и всё писалось и читалось нормально
|
|
#6
|
||||
|
||||
|
String это указатель на память, где хранится информация, а указатель пока что занимает 4 байта.
|
|
#7
|
|||
|
|||
|
Write используется ведь при записи в текстовый файл...
|
|
#8
|
|||
|
|||
|
вот так вроде бы получается:
Код:
var F:File;
St:String;
begin
...
Seek(F,0);
BlockWrite(F,St,Length(St));
Seek(F,0);
St:='';
BlockRead(F,St,SizeOf(St));
...В результате St принимает первоначальное значение, т.е. запись и чтение происходят нормально Последний раз редактировалось Bargest, 24.09.2012 в 22:43. |
|
#9
|
||||
|
||||
|
Если нужна запись структуры в которой присутствует String, то считаем длину структуры через SizeOf - 4 + Length(St).
|
|
#10
|
||||
|
||||
|
Цитата:
|
|
#11
|
|||
|
|||
|
как всё таки написать правильно? (нет не работает :-) )
BlockWrite(F,St,....) ? |
|
#12
|
||||
|
||||
|
Конечно нет. Сначала запиши длину строки, потом саму строку. Читаешь также - длина строки, сама строка.
|
|
#13
|
|||
|
|||
|
можно всё таки поконкретнее :-)
Чтобы записать строку типа String в файл типа File как правильно использовать BlockWrite и BlockRead ? |
|
#14
|
|||
|
|||
|
"Сначала запиши длину строки" это как? BlockWrite(F,Length(St),SizeOf(...)) ?
|
|
#15
|
||||
|
||||
|
Куда уж конкретнее.
Код:
I := Length(St); BlockWrite(F, I, SizeOf(I)); BlockWrite(F, St, Length(St)); |