Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.06.05;
Скачать: CL | DM;

Вниз

TFileStream?   Найти похожие ветки 

 
Beregin   (2003-05-24 19:23) [0]

Делаю:

var ln, pos: Integer;
buf: PChar;
ReadFile: TFileStream;
begin
Pos:=0;
ln:=128;

{Открываем файл для чтения}
ReadFile := TFileStream.Create("test.rar", fmOpenRead);

while Pos < ReadFile.Size do
Begin
if ln > (ReadFile.Size - Pos) then ln:=ReadFile.Size - Pos;
GetMem(buf,ln+1);
ReadFile.Seek(pos,soFromBeginning);
ReadFile.ReadBuffer(buf,ln);
pos:=pos+ln;
End;
FreeMem(buf);
ReadFile.Free;

Говорит что неправильный доступ к памяти. RTFM как мог делал – не помогло.
Объясните где я дурак… Нужно именно через TFileStream


 
jack128 ©   (2003-05-24 19:31) [1]

выделяешь память в цикле (несколько раз), а освобождаешь 1 раз после цикла - отсюда и ошибка


 
Beregin   (2003-05-24 22:51) [2]

Спасибо что ответил, ты конечно прав. Но дело не в этом, точнее не только в этом. Максимально упростил код:

var ln, pos : Integer;
buf: PChar;
RFile: TFileStream;

begin
Pos:=1;
ln:=128;
RFile := TFileStream.Create("test.rar", fmOpenRead);
GetMem(buf,ln+1);
RFile.Seek(pos,soFromBeginning);
RFile.ReadBuffer(buf,ln); {После этого ошибка!}
FreeMem(buf);
RFile.Free;
end;

Ошибка возникает при вызове FreeMem(buf);
Но самое иинтересное, что если закоментировать
RFile.ReadBuffer(buf,ln);
то все работает нормально...
Долго втыкал в хелп по поводу ReadBuffer и Read но так и не понял где ошибка. Наверно я глуповат. Чую что ошибка в моем не понимание каких то основ. Но где понять не могу - я же этого не знаю... :)


 
jack128 ©   (2003-05-25 00:29) [3]

RFile.ReadBuffer(buf ^,ln); - классическая ошибка :-)


 
Beregin   (2003-05-25 16:14) [4]

Спасибо уже понял!:) Долго ругал товарищей писавших статью - не стоит доверять тому что пишут. Но все равно спасибо.



Страницы: 1 вся ветка

Текущий архив: 2003.06.05;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.019 c
14-13451
Vlad Oshin
2003-05-15 09:24
2003.06.05
Не верится, но как объяснить?


6-13350
Opera
2003-04-02 14:41
2003.06.05
Mouse


1-13241
mihei
2003-05-23 14:14
2003.06.05
Как сделать Label прозрачным


14-13464
Еще пока ламак
2003-05-20 14:45
2003.06.05
Delphi и математические методы


9-12989
dinAlt
2002-12-17 17:21
2003.06.05
DelphiX