Я не уверен, есть ли способ «Delphi 2010», но есть способ Windows, который не включает FindFirst и весь этот джаз .
Я собрал это преобразование Delphi этой подпрограммы (и в процессе изменил ее для обработки> файлов размером 4 ГБ, если вам это нужно).
uses
WinApi.Windows;
function FileSize(const aFilename: String): Int64;
var
info: TWin32FileAttributeData;
begin
result := -1;
if NOT GetFileAttributesEx(PWideChar(aFileName), GetFileExInfoStandard, @info) then
EXIT;
result := Int64(info.nFileSizeLow) or Int64(info.nFileSizeHigh shl 32);
end;
На самом деле вы можете просто использовать GetFileSize () , но для этого требуется файл HANDLE, а не просто имя файла, и аналогично предложению GetCompressedFileSize () , для этого нужны две переменные вызов. И GetFileSize () , и GetCompressedFileSize () перезагружают свое возвращаемое значение, поэтому проверка на успешность и обеспечение правильного результата немного неудобнее.
GetFileSize Ex () позволяет избежать тщательной обработки файлов размером> 4 ГБ и определения допустимых результатов, но также требует наличия файла HANDLE, а не имени, и (по состоянию на Delphi 2009, по крайней мере, я не проверял 2010) нигде не объявлен для вас в VCL, вам придется предоставить собственную декларацию импорта.