Ich würde gerne wissen (mit C #), wie ich Dateien in einem bestimmten Verzeichnis löschen kann, das älter als 3 Monate ist, aber ich denke, der Datumszeitraum könnte flexibel sein.
Um ganz klar zu sein: Ich suche nach Dateien, die älter als 90 Tage sind, dh Dateien, die vor weniger als 90 Tagen erstellt wurden, sollten aufbewahrt und alle anderen gelöscht werden.
Antworten:
So etwas macht es nicht.
quelle
LastAccessTime
- Sie sollten sich für eine Immobilie entscheiden,CreationTime
wenn Sie möchten!Hier ist ein 1-Liner-Lambda:
quelle
new DirectoryInfo(dir).GetFiles()
ist schneller alsnew FileInfo(f)
für jede einzelne Datei.Für diejenigen, die LINQ gerne überbeanspruchen.
quelle
.ToList()
Aufruf außer einer zweiten Schleife durch die übereinstimmenden Dateien hinzu?List<T>
definiert eineForEach
Methode, mit der eineAction<T>
auf alle Elemente angewendet werden kann . Leider gibt es keine solche Erweiterungsmethode fürIEnumerable<T>
.ForEach
Erweiterungsmethode vorIEnumerable<T>
so langer Zeit geschrieben, dass ich manchmal vergesse, dass sie nicht eingebaut ist.Hier ist ein Ausschnitt davon, wie Sie die Erstellungszeit von Dateien im Verzeichnis ermitteln und diejenigen finden, die vor 3 Monaten (genauer gesagt vor 90 Tagen) erstellt wurden:
quelle
ToList()
,DirectoryInfo.GetFiles()
gibt a zurückFileInfo[]
.foreach()
Schleife deklarieren , um den Wert von zu speichern(DateTime.Now- new TimeSpan(90, 0, 0, 0))
. Es gibt keinen Grund, dies wiederholt in der Schleife zu berechnen.Die GetLastAccessTime- Eigenschaft in der System.IO.File-Klasse sollte helfen.
quelle
Grundsätzlich können Sie Directory.Getfiles (Pfad) verwenden, um eine Liste aller Dateien abzurufen. Danach durchlaufen Sie die Liste und rufen GetLastAccessTim () auf, wie Keith vorgeschlagen hat.
quelle
Sowas in der Art
quelle
Ich habe diesen Code ausprobiert und er funktioniert sehr gut. Ich hoffe, dies wurde beantwortet
quelle
Der kanonischste Ansatz beim Löschen von Dateien über einen bestimmten Zeitraum ist die Verwendung von LastWriteTime (das letzte Mal, als die Datei geändert wurde):
(Das obige basiert auf Uris Antwort, aber mit
LastWriteTime
.)Wenn Sie Leute über das Löschen von Dateien sprechen hören, die älter als ein bestimmter Zeitraum sind (was eine ziemlich häufige Aktivität ist), ist es fast immer das, wonach sie suchen, wenn sie auf der LastModifiedTime der Datei basieren.
Alternativ können Sie unter sehr ungewöhnlichen Umständen die folgenden Optionen verwenden. Verwenden Sie diese jedoch mit Vorsicht, da sie mit Einschränkungen verbunden sind.
Die Zeit, zu der die Datei am aktuellen Speicherort erstellt wurde. Seien Sie jedoch vorsichtig, wenn die Datei kopiert wurde. Dies ist die Zeit, zu der sie kopiert wurde, und
CreationTime
sie ist neuer als die DateiLastWriteTime
.Wenn Sie die Dateien basierend auf dem letzten Lesevorgang löschen möchten, können Sie dies verwenden. Es gibt jedoch keine Garantie dafür, dass sie aktualisiert werden, da sie in NTFS deaktiviert werden können. Überprüfen Sie
fsutil behavior query DisableLastAccess
, ob es eingeschaltet ist. Auch unter NTFS kann es bis zu einer Stunde dauern, bis die LastAccessTime der Datei nach dem Zugriff aktualisiert wird.quelle
Sie brauchen nur FileInfo -> CreationTime
und dann nur die Zeitdifferenz berechnen.
In der app.config können Sie den TimeSpan- Wert speichern , wie alt die Datei sein muss, um gelöscht zu werden
Schauen Sie sich auch die DateTime Subtract- Methode an.
Viel Glück
quelle
Alternativ können Sie die File.GetCreationTime-Methode verwenden, wenn Sie Dateien basierend auf den Erstellungsdaten löschen müssen.
quelle
Verwendung beim Laden von Seiten oder im Webservice oder bei jeder anderen Verwendung.
Mein Konzept ist alle 7 Tage, an denen ich Ordnerdateien löschen muss, ohne DB zu verwenden
quelle
quelle
Zum Beispiel: Um Mein Ordnerprojekt auf Quelle zu gehen, muss ich zwei Ordner aufrüsten. Ich mache diesen Algorithmus zu 2 Tagen in der Woche und in vier Stunden
quelle
Ich verwende Folgendes in einer Konsolen-App, die als Dienst ausgeführt wird, um Verzeichnisinformationen aus der App.Settings-Datei abzurufen. Die Anzahl der Tage, an denen die Dateien aufbewahrt werden sollen, kann ebenfalls konfiguriert und mit -1 multipliziert werden, um sie in der AddDays () -Methode von DateTime.Now zu verwenden.
quelle
Ein Beispiel vom Typ SSIS. (Wenn dies jemandem hilft)
quelle
da die Lösungen mit
new FileInfo(filePath)
nicht leicht überprüfbar sind, schlage ich Wrappers wie für die Klassen zu verwendenDirectory
,File
undPath
wie folgt aus :Dann benutze so etwas:
quelle
Erstellen Sie einfach eine kleine Löschfunktion, die Ihnen bei der Erfüllung dieser Aufgabe helfen kann. Ich habe diesen Code getestet und er läuft einwandfrei.
Diese Funktion löscht Dateien, die älter als 90 Tage sind , sowie eine Datei mit der Erweiterung .zip , die aus einem Ordner gelöscht werden soll.
quelle