Einzelnen Beitrag anzeigen

Fukiszo
(Gast)

n/a Beiträge
 
#8

AW: Dateigröße ermitteln, wie geht Ihr vor?

  Alt 26. Jan 2018, 12:47
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
  Mit Zitat antworten Zitat