|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
запись String в файл
в Delphi 2010 пытаюсь записать строковую переменную St типа String состоящую из 30 символов в файл так:
BlockWrite (F,St,SizeOf(string)), но при этом в файл зписывается всего 4 байта. При чтении записанного файла с помощью BlockRead(F,St,SizeOf(string)) содержимое St получается пустым (""). Подскажите пожалуйста в чём дело? |
#2
|
||||
|
||||
Причём тут SizeOf? Length.
SizeOf даёт длину указателя на строку, как раз 4 байта. Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#3
|
|||
|
|||
значит должно быть BlockWrite(F,St,Length(St)) ?
|
#4
|
||||
|
||||
Код:
Write(F, St); Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#5
|
|||
|
|||
Length вместо SizeOf в BlockWrite/BlockRead использовать для всех типов переменных? Странно. Я всегда до встречи со String ставил SizeOf и всё писалось и читалось нормально
|
#6
|
||||
|
||||
String это указатель на память, где хранится информация, а указатель пока что занимает 4 байта.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#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).
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#10
|
||||
|
||||
Цитата:
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#11
|
|||
|
|||
как всё таки написать правильно? (нет не работает :-) )
BlockWrite(F,St,....) ? |
#12
|
||||
|
||||
Конечно нет. Сначала запиши длину строки, потом саму строку. Читаешь также - длина строки, сама строка.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#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)); Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |