Создание файла в Delphi с указанным объемом без записи содержимого

Во времена Dos была такая прога balon.exe, могла создавать файлы указанного размера (правда там рандомные байты все же писались). Ясно, что и на Delphi повторить это не сложно. Вопрос: можно ли на D создать файл, заранее выделив под него объем (без записи данных)? Если "да", то рад буду примеру.

Типа(условно)

CreateFile(f,'d:\My.txt');
SetFileSize(f,1024); // 1kb
CloseFile(f);

Если "нет", то вообще такие способы существуют? Например - это типа как в Hyper-V\VMware при создании диска виртуалки - одна из опций - сразу выделить место (файл создается мгновенно), или например у торрент клиентов - опция - выделить место при закачке под файл (тут не уверен).

++Речь идет о Win 10 Ltsc


Ответы (1 шт):

Автор решения: MBo

Вот на встроенных средствах файл 8 гигабайт создаётся мгновенно:

 with TFileStream.Create('f:\test.y', fmCreate) do try
    Size := 8000000000;
  finally
    Free;
  end;

А под капотом там происходит примерно следующее:

  var h: THandle;
  var lw, hg: Integer;
    h := CreateFileA(PAnsiChar('f:\test.x'), GENERIC_READ or GENERIC_WRITE,
                     FILE_SHARE_READ or FILE_SHARE_WRITE, NIL, 
                     CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 0);
    if h <> INVALID_HANDLE_VALUE then begin
      lw := 0;
      hg := 2;
      SetFilePointer(h, lw, @hg, FILE_BEGIN);
      SetEndOfFile(h);
      CloseHandle(h);
    end;
→ Ссылка