Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.012 c
1-13319
Flex
2003-05-25 01:39
2003.06.05
Как получить фокус ввода, при exception?


1-13285
AleksLife
2003-05-24 12:14
2003.06.05
Точное расположение при разном разрешении


1-13290
Maxim Pshevlotsky
2003-05-24 12:44
2003.06.05
Ошибка при обращении к DCOM обьекту


14-13449
Администратор
2003-05-19 22:01
2003.06.05
CoolTools :)


1-13225
GenezZ
2003-05-23 04:27
2003.06.05
Сохранение текстового файла..................................




   Наверх