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)