![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
![]() Добрый день, уважаемые форумчане.
Возникла проблема при чтении одного из полей записи, которая была предварительно слита в файл через TFileStream. Суть: Была record, полям которой присваивались значения некоторых переменных, а потом эта запись заливалась в файл. В другом методе из этого файла считывались данные и заливались в эту же record. Все работало отлично и без нареканий, пока я не решил добавить в запись новое поле. Проблема возникла при чтении данных из файла - в это новое поле не пишется ничего, хотя все остальные поля прогружаются исправно. Привожу кусок кода. Может быть замыленный взгляд пропустил какую-то мелочь. Заранее спасибо за помощь. Код:
var Count: integer; protocol: string= '0.04.02.00'; ... type RTempField= record //для справки в ней так же есть и массивы. ... count: integer; protocol: string; //вот проблемное поле. пробовал менять тип на integer (с изменением типа переменной разумеется) - результата не принесло. ... end; procedure TMasField.SaveToFile(FileName: string); var TempField: RTempField; FileData: TFileStream; begin ... TempField.count:= Count; TempField.protocol:= protocol; //прогонял дебаггером - в поле записи значение стоит ... FileData:= TFileStream.Create(FileName, fmCreate); FileData.Write(TempField, sizeof(TempField)); FileData.Free; end; procedure TMasField.LoadFromFile(FileName: string); var FileData: TFileStream; TempField: RTempField; begin FileData:= TFileStream.Create(FileName, fmOpenRead); FileData.Read(TempField, sizeof(TempField)); FileData.Free; if (TempField.protocol) < (protocol) then //А вот здесь в поле записи уже стоит "", хотя должно быть загружено из файла. begin ... end; Count:= TempField.count; //Тут все работает нормально. ... end; |
#2
|
||||
|
||||
![]() Думаю, следует ограничить размер всех STRINGовых полей записи.
Код:
var Count: integer; protocol: string[10]= '0.04.02.00'; ... type RTempField= record //для справки в ней так же есть и массивы. ... count: integer; protocol: string[10]; //вот проблемное поле. пробовал менять тип на integer (с изменением типа переменной разумеется) - результата не принесло. ... end; Грамотно поставленный вопрос содержит не менее 50% ответа. Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть. |
#3
|
|||
|
|||
![]() Цитата:
Думал, что может быть protocol - какое-то системное имя, но переименование тоже результата не дало. |
#4
|
||||
|
||||
![]() Цитата:
Грамотно поставленный вопрос содержит не менее 50% ответа. Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть. |
#5
|
|||
|
|||
![]() Цитата:
Код:
RTempField= record Mas: array[1..8, 1..8] of byte; FieldOwner: array[1..8, 1..8] of byte; side: byte; players: byte; count: integer; protocol: string; AbsLose: array[1..4] of boolean; end; Про массивы это я к тому, что там не только integer'ы. И что все нормально туда обратно выгружается, кроме почему-то вот этого одного поля. |
#6
|
||||
|
||||
![]() Для начала нужно в обязательном порядке перегрузить Дельфи (имеется у него такой глюк), затем желательно ограничить String, далее "прошагать" проблемное место.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#7
|
|||
|
|||
![]() Цитата:
Проблема повторяется уже третий день, String ограничил, отладчик при сохранении в файл показывает, что в переменной значение есть, а при загрузке - что она пустая. Открывать файл hex-редактором пробовал, но толку мало. В какую еще сторону глядеть не могу даже представить. p.s. Да и стал бы я напрягать других людей, не поискав прежде причину сам =) Последний раз редактировалось nixel, 18.02.2012 в 22:58. |