Ich habe folgendes Problem: mein Programm bearbeitet den Inhalt eines Ordner. Was es genau macht ist unwichtig, auf jeden Fall wird der Ordner als letzte Aktion umbennant. Und wenn der Inhalt des Ordner größer 2 GByte ist, wird an den Ordnernamen noch die Größe des Inhalts in Klammern angehängt, zB "Ordnername (xyz, 2,5GB)".
Das Problem ist, dass das Anhängen der Größe manchmal klappt und manchmal nicht. Der Ordner wird IMMER umbenannt, das ist nicht das Problem. Nur manchmal, obwohl der Inhalt größer 2 GByte ist, wird die Info nicht erzeugt, manchmal schon. Ich sehe nicht woran das liegt. Ich habe schon meine GetFileSize-Funktion gegen eine andere aus dem Internet ersetzt, für den Fall, dass die Funktion das Problem ist. Problem bleibt bestehen.
Delphi-Quellcode:
const
GigaByte: Int64 = 1024 * 1024 * 1024;
Delphi-Quellcode:
if SizeInfo.Checked then
if GetFileSize(FilePath) >= (2 * GigaByte) then
if Length(InfoText) > 0 then
InfoText := InfoText + ', ' + FileSizeStr(FilePath)
else
InfoText := FileSizeStr(FilePath);
Die FileSizeStr-Funktion macht nichts besonderes. Sie gibt den Wert aus GetFileSize nur als String in GB an.
Delphi-Quellcode:
function GetFileSize(const AFileName: string): Int64;
var
SearchRec: TSearchRec;
OldMode: Cardinal;
Size: TULargeInteger;
begin
Result := -1;
OldMode := SetErrorMode(SEM_FAILCRITICALERRORS);
try
if FindFirst(AFileName, faAnyFile, SearchRec) = 0 then
begin
Size.LowPart := SearchRec.FindData.nFileSizeLow;
Size.HighPart := SearchRec.FindData.nFileSizeHigh;
Result := Size.QuadPart;
SysUtils.FindClose(SearchRec);
end;
finally
SetErrorMode(OldMode);
end;
end;
Wo es eigentlich immer klappt, das ist in der
IDE. Da wird die Größenangabe immer korrekt angegeben. Und gelegentlich über die EXE. Nur nicht immer.