Форум: "Основная";
Текущий архив: 2003.06.05;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.012 c