Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.196 Beiträge
 
Delphi 12 Athens
 
#10

Re: FileExists liefert false bei existierenden Dateien

  Alt 27. Okt 2009, 11:36
Delphi-Quellcode:
function FileExists(const FileName: string): Boolean;
begin
  Result := FileAge(FileName) <> -1;
end;
FileExists und FileAge lieferten in "alten" DelphiVersionen (dazu zählt auch D7) falsche Ergebnisse, da FileAge nicht erfolgreich war, wenn keine Zugriffsrechte bestannden.
Z.B. weil die Datei gerade geöffnet war und CreateFile keine SharingRechte bekam.

Hier findet man Lösungen:
http://www.delphipraxis.net/internal...exists+fileage

Und falls dein Dateisystem wirklich futsch ist, hier ein kleiner Reparierer;
(Hauptcode in Kurz)
Der arbeitet sich ab seinem Arbeitsverzeichnis rekursiv nach unten durch,
also Programm z.B. einfach ins Hauptverzeichnis des Laufwerkes kopieren und ausführen.
Man kann es auch erstmal nur suchen lassen
Delphi-Quellcode:
Procedure TForm1.Repair(Const Dir: String);
  Var SR: TSearchRec;
    FT: TFileTime;
    H: THandle;

  Begin
    If FindFirst(Dir + '*.*', faAnyFile, SR) = 0 Then Begin
      Repeat
        If (SR.Name = '.') or (SR.Name = '..') Then Continue;
        If (SR.Attr and faDirectory = 0) and (FileAge(Dir + SR.Name) < 0) Then Begin
          Memo1.Lines.Add(Dir + SR.Name);
          If not CheckBox1.Checked Then Begin
            GetSystemTimeAsFileTime(FT);
            H := CreateFile(PChar(Dir + SR.Name), FILE_WRITE_ATTRIBUTES,
              FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0);
            SetFileTime(H, nil, nil, @FT);
            CloseHandle(H);
          End;
        End;
        If SR.Attr and faDirectory <> 0 Then Repair(Dir + SR.Name + '\');
      Until (FindNext(SR) <> 0) or Application.Terminated;
      FindClose(SR);
    End;
  End;
Feler 32 = ERROR_SHARING_VIOLATION (The process cannot access the file because it is being used by another process)
Angehängte Dateien
Dateityp: exe project1_998.exe (505,0 KB, 4x aufgerufen)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat