Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Dateien löschen älter als xxx (https://www.delphipraxis.net/115826-dateien-loeschen-aelter-als-xxx.html)

SaFu 18. Jun 2008 15:45


Dateien löschen älter als xxx
 
Hi

steh mal wieder vor einem Problem hab diesen code hier gefunden in der DP
Delphi-Quellcode:
procedure TForm1.Button7Click(Sender: TObject);
Var  SearchRec :TSearchRec;
begin
  if FindFirst(JvComputerInfoEx1.Folders.Desktop+ '\'+ExtractFileName(ShellTreeView2.Path)+'\*.*', faDirectory, SearchRec) = 0 then
  begin
    showmessage((JvComputerInfoEx1.Folders.Desktop+ '\'+ExtractFileName(ShellTreeView2.Path)+'\'));
    repeat
       if (SearchRec.Attr <> faDirectory) and (SearchRec.Name <>'.') and (SearchRec.Name <>'..') then
       begin
        showmessage(SearchRec.Name);
        if FileDateToDateTime(FileAge(JvComputerInfoEx1.Folders.Desktop+ '\'+ExtractFileName(ShellTreeView2.Path)+'\' + SearchRec.Name)) < (Date -20) then
        begin
          DeleteFile(JvComputerInfoEx1.Folders.Desktop+ '\'+ExtractFileName(ShellTreeView2.Path)+'\' + SearchRec.Name); // Delete File
        end;
       end;
    until FindNext(SearchRec) <> 0;
  end;
  FindClose(SearchRec);
end;
Jetzt ist mein problem das ich nicht weiter komme bis zum showmessage ich bin der Meinung das es so stimmt. der Pfad stimmt aber

Gruß Sascha

DeddyH 18. Jun 2008 15:48

Re: Dateien löschen älter als xxx
 
Was geht denn nicht?

F.W. 18. Jun 2008 15:49

Re: Dateien löschen älter als xxx
 
Ich denke mal dein Code hört schon zum ersten mal da auf:
Delphi-Quellcode:
FindFirst( ... , faDirectory, ... )
Denn damit erhälst du ja nur Verzeichnisse. Selbst wenn du Verzeichnisse auf deinem Desktop hast, würde es dann mit
Delphi-Quellcode:
 if (SearchRec.Attr <> faDirectory) and (SearchRec.Name <>'.') and (SearchRec.Name <>'..') then
eh nicht weitergehen, denn wenn oben nur faDirectory aufgelistet wird und unten steht if Attr <> faDirectory, schließt sich das von selbst aus.

Übergib beim FindFirst mal faAnyFile!

DeddyH 18. Jun 2008 15:53

Re: Dateien löschen älter als xxx
 
Außerdem ist der Vergleich sowieso nicht optimal.
Schlecht:
Delphi-Quellcode:
if (SearchRec.Attr <> faDirectory)
Besser:
Delphi-Quellcode:
if ((SearchRec.Attr and faDirectory) <> faDirectory)

SaFu 18. Jun 2008 15:53

Re: Dateien löschen älter als xxx
 
Wenn ich das Programm starte und denn Button ausführe geht die Procedure nichtmal bis zum showmessage

aber FaAnyFile geht auch nicht ich versuche im Verzeichnis der Shelltreeview alle Dateien zu löschen die älter als 90 Tage sin (ich weis immoment sind es nur 7 Tage)

DeddyH 18. Jun 2008 15:55

Re: Dateien löschen älter als xxx
 
Setz doch das erste ShowMessage mal direkt hinter das begin.

SaFu 18. Jun 2008 15:56

Re: Dateien löschen älter als xxx
 
Hab ich doch da wird der Pfad angezeigt und der ist auch richtig

DeddyH 18. Jun 2008 15:58

Re: Dateien löschen älter als xxx
 
Und Dateien sind drin? Bzw. Verzeichnisse, da Du ja nach denen suchst.

SaFu 18. Jun 2008 16:01

Re: Dateien löschen älter als xxx
 
hab jetzt den Pfad mal etwas angepasst aber jetzt komme ich auch weiter nur gelöcht wir Trotzdem nichts

F.W. 18. Jun 2008 16:10

Re: Dateien löschen älter als xxx
 
Um Fehler zu vermeiden, würde ich dir empfehlen, dass du den Pfad mal in eine extra Variable speicherst, denn so wird der Quellcode ganz schnell unübersichtlich. Außerdem kannst du so relativ einfach eine Änderung am Pfad vornehmen, solltest du einen Fehler an ihm bemerken.

Schau mal, ob du an Stelle von
Delphi-Quellcode:
FileDateToDateTime(FileAge(JvComputerInfoEx1.Folders.Desktop+ '\'+ExtractFileName(ShellTreeView2.Path)+'\' + SearchRec.Name))
nicht einfach SearchRec.Time benutzen kannst.

Das erstmal nur als Hinweise.

Ein Knackpunkt ist noch, dass Dateien ja mehrere Datums/Daten haben: Erstellungsdatum, Datum des letzten Zugriffs und Datum der letzten Änderung (auf NTFS glaube ich sogar noch eins mehr)
Check mal, ob FileDateToDateTime oder SearchRec.Time überhaupt die richtigen Daten angeben!

littleDave 18. Jun 2008 16:14

Re: Dateien löschen älter als xxx
 
Mach mal
Delphi-Quellcode:
ShowMessage(JvComputerInfoEx1.Folders.Desktop+ '\'+ExtractFileName(ShellTreeView2.Path)+'\*.*')
und schau ob da nicht irgendwas schief läuft (zwei \ direkt hintereinander oder so)

DeddyH 18. Jun 2008 16:33

Re: Dateien löschen älter als xxx
 
Das sag ich doch die ganze Zeit ;)

SaFu 18. Jun 2008 17:02

Re: Dateien löschen älter als xxx
 
Liste der Anhänge anzeigen (Anzahl: 2)
So das klappt jetzt wunderbar, das Problem war wirklich ein Pfad Fehler.

Jetzt ist mir nur aufgefallen das ich das garnicht so realisieren kann wäre auch zu schön gewesen wenn es so leicht ginge.

Das Problem was ich habe ist, das ich mehrere Ordner habe in der ShellTrieView (Bild Ordnerstrucktur.jpg) die naturlich auch mehr werden können und die alle, die selbe Dateienstrucktur haben wie im bild: Dateien.jpg.

Wie durchsuche ich jetzt alle Ordner in der ShellTreeView

1. Sind diese Dateien (strucktur) vorhanden (FileExists)
2. Wenn ja, lösche alle Dateien die älter als eingestellte Zeit (90Tage).

Bei meiner jetzigen funktion kann ich nicht in alle Ordner gehen da sonst auch Dateien gelöscht werden die ja nicht gelöscht werden sollen, wenn ich z.b ein Bild meiner Großoma drin habe und das älter als die eingestellte Ziet ist.

Es sollen nur Dateien gelöscht werden die so heißen wie auf dem Bild: Dateien.jpg


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:02 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz