![]() |
Прежде чем задать вопрос, смотрите 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 - то уже глючит точно также) Кто нибудь может сказать в чем здесь дело ??? -------------------- Все в жизни ботва... Кроме пчел!
|
![]() ![]() |
AlienEmperor |
![]()
Сообщение
#2
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 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; -------------------- Все в жизни ботва... Кроме пчел!
|
![]() ![]() |
![]() |
Текстовая версия | 13.08.2025 8:16 |