yurikhan: (Default)
[personal profile] yurikhan

(По мотивам обсуждения: hashcrc, FarMD5, MD5Arc)

procedure ProcessFile(fileName: string);
var
  f: file;
  buffer: array [0..32767] of Byte;
  bytesRead: Longint;
begin
  AssignFile(f, fileName);
  ResetFile(f, 1);
  try
    while not Eof(f) do
    begin
      BlockRead(f, buffer, SizeOf(buffer), bytesRead);
      // Do something with buffer
    end;
  finally
    CloseFile(f);
  end;
end;

Что не так на этой картинке?

function _FilePos(var f: TFileRec): Longint;
function _FileSize(var f: TFileRec): Longint;

function _EofFile(var f: TFileRec): Boolean;
begin
  Result := _FilePos(f) >= _FileSize(f);
end;

Какая прелесть.

На дворе двадцать первый век, когда космические корабли поездят просторы Большого театра, а у них размер файла и позиция в нём — знаковое 32-битное целое.

Что будет с этим кодом, когда ему подсунут двухгигабайтный или больший файл?

Если остаток от деления на 4G будет больше 2G, то _FileSize выдаст отрицательное значение, и сравнение в _EofFile выдаст True с первой ложки.

Если остаток от деления на 4G будет меньше 2G, то из файл всё-таки немного прочитается. Ровно столько, каков остаток.

Мораль? Фреймворки — это хорошо, но за ними тоже нужен глаз да глаз.

Date: 2007-02-06 22:33 (UTC)
From: [identity profile] ex-digital-4.livejournal.com
Сорри, откомментил, кат не читая. :(

Date: 2007-02-06 22:32 (UTC)
From: [identity profile] ex-digital-4.livejournal.com
bytesRead маловат?

Profile

yurikhan: (Default)
Yuri Khan

August 2018

S M T W T F S
   1234
567891011
12131415161718
19202122232425
26 2728293031 

Links

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated 2025-06-18 19:47
Powered by Dreamwidth Studios