![]() |
Dateien löschen älter als xxx
Hi
steh mal wieder vor einem Problem hab diesen code hier gefunden in der DP
Delphi-Quellcode:
Jetzt ist mein problem das ich nicht weiter komme bis zum showmessage ich bin der Meinung das es so stimmt. der Pfad stimmt aber
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; Gruß Sascha |
Re: Dateien löschen älter als xxx
Was geht denn nicht?
|
Re: Dateien löschen älter als xxx
Ich denke mal dein Code hört schon zum ersten mal da auf:
Delphi-Quellcode:
Denn damit erhälst du ja nur Verzeichnisse. Selbst wenn du Verzeichnisse auf deinem Desktop hast, würde es dann mit
FindFirst( ... , faDirectory, ... )
Delphi-Quellcode:
eh nicht weitergehen, denn wenn oben nur faDirectory aufgelistet wird und unten steht if Attr <> faDirectory, schließt sich das von selbst aus.
if (SearchRec.Attr <> faDirectory) and (SearchRec.Name <>'.') and (SearchRec.Name <>'..') then
Übergib beim FindFirst mal faAnyFile! |
Re: Dateien löschen älter als xxx
Außerdem ist der Vergleich sowieso nicht optimal.
Schlecht:
Delphi-Quellcode:
Besser:
if (SearchRec.Attr <> faDirectory)
Delphi-Quellcode:
if ((SearchRec.Attr and faDirectory) <> faDirectory)
|
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) |
Re: Dateien löschen älter als xxx
Setz doch das erste ShowMessage mal direkt hinter das begin.
|
Re: Dateien löschen älter als xxx
Hab ich doch da wird der Pfad angezeigt und der ist auch richtig
|
Re: Dateien löschen älter als xxx
Und Dateien sind drin? Bzw. Verzeichnisse, da Du ja nach denen suchst.
|
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
|
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:
nicht einfach SearchRec.Time benutzen kannst.
FileDateToDateTime(FileAge(JvComputerInfoEx1.Folders.Desktop+ '\'+ExtractFileName(ShellTreeView2.Path)+'\' + SearchRec.Name))
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! |
Re: Dateien löschen älter als xxx
Mach mal
Delphi-Quellcode:
und schau ob da nicht irgendwas schief läuft (zwei \ direkt hintereinander oder so)
ShowMessage(JvComputerInfoEx1.Folders.Desktop+ '\'+ExtractFileName(ShellTreeView2.Path)+'\*.*')
|
Re: Dateien löschen älter als xxx
Das sag ich doch die ganze Zeit ;)
|
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