![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() ![]() |
![]() |
AlienEmperor |
![]()
Сообщение
#1
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 160 Пол: Мужской Реальное имя: Серый Репутация: ![]() ![]() ![]() |
Возникла проблема, совсем не понимаю - откуда ?
Суть: Код Procedure read.... Var F:File; L:Integer; Txt:PChar; .... begin BlockRead(F,L,SizeOf(Integer)); ShowMessage(IntToStr(L)); // должно быть L=10, так и есть, считывает OK GetMem(Txt,L); BlockRead(F,Txt^,L); // вот здесь он считывает 17 - 20 байтов (видимо, по настроению), вместо L=10 !!! .... далее - неправильное считывание, crush and so on... :( FreeMem(Txt,L); End; Если вручную поставить BlockRead(F,Txt^,7), то считывает текст не полностью (т.е. 7 символов вместо 10 - логично, а вот если поставить 8 - то уже глючит точно также) Кто нибудь может сказать в чем здесь дело ??? -------------------- Все в жизни ботва... Кроме пчел!
|
hiv |
![]()
Сообщение
#2
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 660 Пол: Мужской Реальное имя: Михаил Репутация: ![]() ![]() ![]() |
У тебя перед BlockRead стоит Reset(F, 1) ?
-------------------- Никогда не жадничай. Свои проблемы с любовью дари людям!
|
AlienEmperor |
![]()
Сообщение
#3
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 160 Пол: Мужской Реальное имя: Серый Репутация: ![]() ![]() ![]() |
2 hiv: угу...
Причем, я уже проверял: запись проходит корректно... По FilePos смотрел - тоже все ОК - перед самым считыванием строки стоит на 10 байтов до конца файла... После считывания - в самом конце файла... я медленно начинаю шизеть.... ![]() -------------------- Все в жизни ботва... Кроме пчел!
|
hiv |
![]()
Сообщение
#4
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 660 Пол: Мужской Реальное имя: Михаил Репутация: ![]() ![]() ![]() |
Версии ОС и Делфи в студию!
-------------------- Никогда не жадничай. Свои проблемы с любовью дари людям!
|
xds |
![]()
Сообщение
#5
|
![]() N337 ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 737 Пол: Мужской Репутация: ![]() ![]() ![]() |
Добавь нулевой байт в конец строки:
Код ... GetMem(Txt, L + 1); BlockRead(F, Txt^, L); Txt[L] := #0; ... FreeMem(Txt); ... -------------------- The idiots are winning.
|
AlienEmperor |
![]()
Сообщение
#6
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 160 Пол: Мужской Реальное имя: Серый Репутация: ![]() ![]() ![]() |
Значит так: OS: Windows 98 SE2
Delphi 5 Enterprise процедура (полная версия) (с записью все ОК): Код Procedure TBase.LoadFromFile(FileName:String); Var I:Word; NumOfRecords:Word; F:File; Info:TInfo; Txt:PChar; L:Integer; Begin If Not(FileExists(FileName)) Then Begin ShowMessage('Файл '+FileName+'не существует!'); Exit; End; If Data.Count>0 Then For I:=0 To Data.Count-1 Do Begin CurrentData:=Data[I]; CurrentData.PicStorage.Destroy; Dispose(CurrentData); End; Data.Free; Data:=TList.Create; AssignFile(F,FileName); ReSet(F,1); BlockRead(F,NumOfRecords,SizeOf(Word)); If NumOfRecords = 0 Then Begin CloseFile(F); ShowMessage('Нет записей!'); Exit; End; For I:=0 To NumOfRecords-1 Do Begin BlockRead(F,Info,SizeOf(TInfo)); BlockRead(F,L,SizeOf(Integer)); ShowMessage('L= '+IntToStr(L)); GetMem(Txt,L); ShowMessage('FilePos(F) = '+IntToStr(FilePos(F))); BlockRead(F,Txt^,L); ShowMessage('FilePos(F) (after read) = '+IntToStr(FilePos(F))); ShowMessage('Length(Txt) = '+IntToStr(Length(Txt))); ShowMessage(' Txt = '+Txt); AddRec; SetInfo(I,Info); SetText(I,Txt); CurrentData:=Data.Items[I]; CurrentData.PicStorage.LoadFromFile(ExtractFilePath(FileName)+ CurrentData.Info.PicFile); FreeMem(Txt,L); End; CloseFile(F); CurrentRecNum:=0; CurrentData:=Data.Items[0]; Assigned:=True; Changed:=False; End; -------------------- Все в жизни ботва... Кроме пчел!
|
AlienEmperor |
![]()
Сообщение
#7
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 160 Пол: Мужской Реальное имя: Серый Репутация: ![]() ![]() ![]() |
Точно! Блин... Это же PChar !!!
YES !!! Все, спасибо, xds !!! Теперь все встало на свои места... СПАСИБО, а то я уже офигел смотреть на одно и то же... ![]() ![]() ![]() -------------------- Все в жизни ботва... Кроме пчел!
|
xds |
![]()
Сообщение
#8
|
![]() N337 ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 737 Пол: Мужской Репутация: ![]() ![]() ![]() |
Можно было ещё так:
Код var Txt: String; .... SetLength(Txt, L); BlockRead(F, Txt[1], L); ... -------------------- The idiots are winning.
|
![]() ![]() |
![]() |
Текстовая версия | 10.08.2025 2:44 |