Я использую TFileStream.Read в цикле для чтения текстового файла, но я считаю, что последняя часть не считывается в буфер, хотя общее количество байтов read равно размеру файла.TFileStream.Read не читает последнюю часть файла
Это мой код:
procedure TForm1.DoImport;
var
f: String;
fs: TFileStream;
r, c: Integer;
buf: TBytes;
const
bufsiz = 16384;
begin
SetLength(buf, bufsiz);
f := 'C:\Report\Claims\Claims.csv';
fs := TFileStream.Create(f, fmOpenRead);
try
c := 0;
repeat
r := fs.Read(buf, bufsiz);
Inc(c, r);
until (r <> bufsiz);
showmessage('Done. ' + IntToStr(c)); // <-- c equals to filesize !!
Memo1.Text := StringOf(buf); // <-- but the memo does not show the last chunk of the file
finally
fs.Free;
end;
end;
В конце концов, TMemo не содержит последний фрагмент файла, но 2-ой до последнего куска. Что-то не так с моим кодом?
Заранее благодарен!
Фактически должна отображаться только последняя часть файла. Вы постоянно читаете в том же буфере 'buf' и переопределяете старый контент. – gabr
@RawN: Итак, у меня должен быть FillChar (buf [Low (buf)], Length (buf), 0) непосредственно перед вызовом Read? –
@gabr: Да, я хочу только последнюю часть файла. Я просто тестирую код на этом этапе. Но это не показывает последнюю часть ... Это показывает следующий последний кусок. –