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, то из файл всё-таки немного прочитается. Ровно столько, каков остаток.

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

(will be screened)
(will be screened if not validated)
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

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-07-10 04:57
Powered by Dreamwidth Studios