Entwickler-Ecke

Dateizugriff - Erstellungs-Datum von Verzeichnissen auslesen.


green-sound - So 20.04.03 16:50
Titel: Erstellungs-Datum von Verzeichnissen auslesen.
Hallo erstmal :D

Ich habe folgendes Problem:

Ich soll ein kleines Programm schreiben das alle Verzeichnisse eines Laufwerkes die älter als 2 Wochen sind löscht.

Die Procedur zum löschen der Verzeichnisses hab ich schon!!

Wie krieg ich jetzt aber raus welches Verzeichnis älter als 2 Wochen ist!

Hoffe ihr könnt mir weiterhelfen...

mfg green-sound


Blackout - Mo 21.04.03 06:25

hi green-sound,

hast du denn schon eine Funktion womit du Ordner auf einem Laufwerk suchen kannst?
Wenn nicht benutze die Suchfunktion im Forum ich denke da lässt sich was passendes finden.

Um das Erstellungsdatum eines Ordners zu bekommen kannst du folgende Funktion benutzen:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
Function GetFileDate(TheFile: String): TDateTime;

Var
  SearchRec: TSearchRec;
  DT: TFileTime;
  ST: TSystemTime;
  
Begin

  Result:= 0;
  Try
    If (FindFirst(TheFile, faAnyFile, SearchRec) = 0) Then
      Begin
        FileTimeToLocalFileTime(SearchRec.FindData.ftCreationTime, DT);
        FileTimeToSystemTime(DT, ST);
        Result:= EncodeDate(st.wYear, st.wMonth, st.wDay);
      End;
  Finally
    FindClose(SearchRec);
  End;
  
End;


Und so könnte man die Funktion nutzen:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
procedure TForm1.Button1Click(Sender: TObject);

Var
  FileDate: TDate;
  Directory: String;  

Begin

  Directory:= 'C:\Windows';  // Beispiel
  FileDate:= StrToDate(DateToStr(GetFileDate(Directory)+14));
 
  If FileDate = Now Then ShowMessage('Der Ordner "'+Directory+'" ist 14 Tage alt')
  Else If FileDate > Now Then ShowMessage('Der Ordner "'+Directory+'" ist keine 14 Tage alt')  
  Else If FileDate < Now Then ShowMessage('Der Ordner "'+Directory+'" ist über 14 Tage alt');

End;



Ich brauchte diese Funktion auch einmal hab den Aufruf jetzt schnell etwas verständlicher umgeschrieben musst eben nur ein wenig ändern.

Ich hoffe ich konnte dir helfen


green-sound - Di 22.04.03 07:02

Hey Dankeschön!!

Aber bei deiner Funktion erhalte ich ne Fehlermeldung, mit der ich nichts anfangen kann. Vieleicht kannst du mir ja nochmal kurz weiterhelfen?

Die Meldung lautet:

Zitat:


Inkompatible Typen: 'Cardinal' und 'TSearchRec'


und kommt an folgender Stelle:


Quelltext
1:
2:
3:
Finally 
    FindClose(SearchRec);  //genau hier!!
End;


Blackout - Di 22.04.03 12:54

Ich habs bei mir jetzt nochmal getestet, läuft wunderbar :?:

Probier mal das hier:


Quelltext
1:
2:
3:
  Finally 
    Sysutils.FindClose(SearchRec); 
  End;