Nie jestem pewien, czy istnieje sposób "Delphi 2010", ale istnieje Windows way that doesn't involve FindFirst and all that jazz.
Zrzuciłem tę konwersję Delphi tej procedury (iw procesie zmodyfikowałem ją tak, aby obsługiwała pliki o rozmiarach> 4 GB, jeśli tego potrzebujesz).
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;
Można było rzeczywiście wystarczy użyć GetFileSize() ale wymaga to uchwyt pliku, a nie tylko nazwę pliku, a podobny do GetCompressedFileSize() sugestia ta wymaga dwóch zmiennych zadzwonić. Zarówno GetFileSize() i GetCompressedFileSize() przeciążają ich wartość zwracaną, więc testowanie na sukces i zapewnienie prawidłowego wyniku jest po prostu trochę bardziej niezręczne.
GetFileSize Ex() unika piaszczysty nitty rozmiarów Obsługa plików> 4GB i wykrywanie poprawnych wyników, ale również wymaga dojścia do pliku, zamiast imienia i (od Delphi 2009 przynajmniej ja haven 't checked 2010) nie jest dla ciebie zadeklarowany w VCL, musiałbyś podać swoją własną deklarację importową.
Po prostu zajrzałem do biblioteki kodów JEDI w ich funkcji FileGetSize. W rzeczywistości używa tylko metody FindFirst. –
@J__ dlaczego nie odpowiedź?dodaj linki do wiki JCL i pobierania JCL - a to by oznaczało dobry połów –
Proszę, zagłosuj na http://qc.embarcadero.com/wc/qcmain.aspx?d=110073 –