Создание файла в Delphi с указанным объемом без записи содержимого
Во времена Dos была такая прога balon.exe, могла создавать файлы указанного размера (правда там рандомные байты все же писались). Ясно, что и на Delphi повторить это не сложно. Вопрос: можно ли на D создать файл, заранее выделив под него объем (без записи данных)? Если "да", то рад буду примеру.
Типа(условно)
CreateFile(f,'d:\My.txt');
SetFileSize(f,1024); // 1kb
CloseFile(f);
Если "нет", то вообще такие способы существуют? Например - это типа как в Hyper-V\VMware при создании диска виртуалки - одна из опций - сразу выделить место (файл создается мгновенно), или например у торрент клиентов - опция - выделить место при закачке под файл (тут не уверен).
++Речь идет о Win 10 Ltsc
Ответы (1 шт):
Вот на встроенных средствах файл 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;