Tôi không chắc chắn có cách "Delphi 2010" hay không, nhưng có Windows way that doesn't involve FindFirst and all that jazz.
Tôi đã ném cùng chuyển đổi Delphi này của thường trình đó (và trong quá trình sửa đổi nó để xử lý> tệp kích thước 4GB, bạn nên cần điều đó).
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;
Bạn thực sự có thể chỉ cần sử dụng GetFileSize() nhưng điều này đòi hỏi một HANDLE tập tin, không chỉ là một tên tập tin, và tương tự như GetCompressedFileSize() gợi ý, điều này đòi hỏi hai biến để gọi. Cả hai GetFileSize() và GetCompressedFileSize() quá tải giá trị trả về của chúng, vì vậy kiểm tra thành công và đảm bảo kết quả hợp lệ chỉ hơi rắc rối hơn một chút.
GetFileSize Ex() tránh nitty gritty của kích thước tập tin xử lý> 4GB và phát hiện kết quả đúng, nhưng cũng đòi hỏi một HANDLE tập tin, chứ không phải là một cái tên, và (như của Delphi 2009 ít nhất, tôi thiên đường 't kiểm tra 2010) không phải là tuyên bố cho bạn trong VCL bất cứ nơi nào, bạn sẽ phải cung cấp tờ khai nhập khẩu của riêng bạn.
Chỉ cần nhìn vào thư viện mã JEDI tại chức năng FileGetSize của chúng. Nó, trên thực tế, chỉ sử dụng phương pháp FindFirst. –
@J__ tại sao không phải là câu trả lời?thêm liên kết đến JCL wiki và tải xuống JCL - và điều đó sẽ tạo thành một kết quả tốt –
Vui lòng bỏ phiếu cho http://qc.embarcadero.com/wc/qcmain.aspx?d=110073 –