Главная страница
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.014 c
3-13046
strimmer
2003-05-16 18:22
2003.06.05
Доступ к локальной базе с нескольких компьютеров


4-13503
Kair
2003-04-06 22:35
2003.06.05
Message


1-13119
Test
2003-05-25 18:06
2003.06.05
HOWTO WriteLn в консоле цветом сделать?


3-13022
Dimaz-z
2003-05-16 12:02
2003.06.05
Как выстроить записи в базе данных по алфавиту? Помогите!!!


14-13454
cyborg
2003-05-17 18:27
2003.06.05
Сценайри RPG игры