ska*_*adt 10
只是为了笑嘻嘻......你也可以用流做这个只是略多于2行代码.通常,包括路径的应用程序文件名也存储在Paramstr(0)中.
var
fs : tFilestream;
begin
fs := tFilestream.create(paramstr(0),fmOpenRead or fmShareDenyNone);
try
result := fs.size;
finally
fs.free;
end;
end;
Run Code Online (Sandbox Code Playgroud)
它并不像你想要的那么小,但它不需要手柄.我在所有必须知道其大小的"SFX"归档程序和程序中使用它.IIRC它需要Windows单元.
function GetExeSize: cardinal; var p: pchar; i, NumSections: integer; const IMAGE_PE_SIGNATURE = $00004550; begin result := 0; p := pointer(hinstance); inc(p, PImageDosHeader(p)._lfanew + sizeof(dword)); NumSections := PImageFileHeader(p).NumberOfSections; inc(p,sizeof(TImageFileHeader)+ sizeof(TImageOptionalHeader)); for i := 1 to NumSections do begin with PImageSectionHeader(p)^ do if PointerToRawData+SizeOfRawData > result then result := PointerToRawData+SizeOfRawData; inc(p, sizeof(TImageSectionHeader)); end; end;