Einzelnen Beitrag anzeigen

Alallart
Online

Registriert seit: 8. Dez 2015
154 Beiträge
 
#1

Funktion funktioniert manchmal, manchmal nicht.

  Alt 2. Jan 2019, 00:58
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.
  Mit Zitat antworten Zitat