Danke für all eure Vorschläge und Mühe
Code:
// von LTE5
function lwFileSize(const aFileName: string): Int64;
var
FileInfo: TWin32FileAttributeData;
begin
Result := -1;
FillChar(FileInfo, SizeOf(FileInfo), 0); // das hier evtl weglassen, muss ich selbst erst nachvollziehen können warum
if GetFileAttributesEx(PChar(aFileName), GetFileExInfoStandard, @FileInfo) then
begin
Int64Rec(Result).Hi := FileInfo.nFileSizeHigh;
Int64Rec(Result).Lo := FileInfo.nFileSizeLow;
end;
end;
das hier klappt wie gewünscht (bei "file not found" = -1) für mich und die routine arbeitet wirklich schneller
wobei ich total geneigt bin auch das hier dafür zu verwenden:
Code:
// von mehreren
DP teilnehmern, hier kann man rückgabewert verintensivieren
// (für externe fehlerbestimmung ist's so besser, sonst evtl dutzende fehlermeldungen falls in einer loop aufgerufen)
// -1 file not found
// -2 general error
// >= 0 filesize in byte
function lwFileSize(const fileName: String): Int64;
var
info: TWin32FileAttributeData;
begin
if not GetFileAttributesEx(PChar(fileName), GetFileExInfoStandard, @info) then // tatsächlich pChar ja? (
Unicode dingens)
if GetLastError in [ERROR_FILE_NOT_FOUND, ERROR_PATH_NOT_FOUND] then
result := -1 //raise EFileNotFoundException.CreateRes(@SFileNotFound)
else
result := -2 // RaiseLastOSError;
Result := Int64(info.nFileSizeLow) or Int64(info.nFileSizeHigh shl 32);
end;
Grüße & Danke