Nach 30 Tagen Dateien löschen

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von filewaker.

    Guck dir mal die FileInfo-Klasse an. msdn.microsoft.com/de-de/libra…o.fileinfo(v=vs.110).aspx
    Du erstellst dir also ein FileInfo-objekt mithilfe des Pfades zur Datei (New FileInfo(pfadZurDatei)). Dieses Objekt hat eine Property namens CreationTime (also das Datum, an dem die Datei erstellt wurde).
    TimeSpan diff = DateTime.Now - fileInfoObjekt.CreationTime (fileInfoObjekt entsprechend durch das Objekt ersetzen welches du zuvor erstellt hast).
    Das TimeSpan Objekt hat nun eine Property namens TotalDays (also wie viele tage zwischen dem Erstelldatum und dem heutigen Datum liegen).
    Jetzt prüfst du einfach nur, ob TotalDays > 30. Wenn ja, löschst du die Datei.


    Edit: Sry, falsch verstanden. Du willst, dass auch wenn dein Programm nicht mehr läuft, bestimmte Dateien, die älter als 30 Tage sind, gelöscht werden?
    NTFS hat kein "Verfallsdatum" für Dateien.
    Also kannst du nur ein Programm schreiben, das Dateien, die ein bestimmtes Alter erreicht haben, löscht.
    Dieses Programm kannst du im Scheduler täglich triggern.

    Du solltest da aber sehr genau ermitteln, ob du CreationDate oder ChangeDate (oder beide) abfangen willst.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Danke für die Antwort!!

    ja genau das ist es ja.

    Wie frage ich eine Datei ab, zudem wie lösche ich sie dann ?

    Kann ich nicht das Erstell-Datum abfragen und wenn die Datei 30-Tage alt ist, dann wird sie gelöscht ?
    Zudem müssen ja bei jedem Start die Dateien abgefragt werden ?

    Danke
    Ansatz für ein einzelnes Verzeichnis:

    VB.NET-Quellcode

    1. Dim folder= "c:\temp\"
    2. Dim files = System.IO.Directory.GetFiles(folder)
    3. For Each filename In files
    4. Dim fi = New System.IO.FileInfo(filename)
    5. 'If fi.LastWriteTime < DateTime.Now.AddDays(-30) Then fi.Delete() 'letztes Schreibdatum
    6. If fi.CreationTime < DateTime.Now.AddDays(-30) Then fi.Delete()
    7. Next 'Erstelldatum


    filewaker schrieb:

    Zudem müssen ja bei jedem Start die Dateien abgefragt werden ?
    Das kannst du alles im Scheduler einstellen.
    Stichwort für die Windows-Suche: Aufgabenplanung
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „petaod“ ()

    System.IO sollte die antwort auf deine Fragen sein,...

    Mit File.GetCreationTime kannst du die Daten bekommen.. Bzw. die Daten nehmen die du brauchst

    VB.NET-Quellcode

    1. 'Monat (Wenn Datei in September erstellt dann liefert dies einen Integer mit dem Wert 9 zurück
    2. Dim fileCreatedDate As Integer = File.GetCreationTime("C:\bla.txt").Month
    3. MsgBox("file created: " + fileCreatedDate.ToString)
    4. 'Du kannst auch..
    5. Dim fileCreatedDate As DateTime = File.GetCreationTime("C:\bla.txt") 'schreiben, hier musst du aber einen Typen mit dem Wert DateTime erstellen
    6. MsgBox("file created: " + fileCreatedDate.ToString)


    Siehe auch MSDN

    Wobei @petaod 's methode wohl besser ausschaut^^
    (..da ich vom erstell datum ausgehe und Petaod vom Änderungsdatum)
    Option Strict On!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Drahuverar“ ()

    @petaod Jo, aber anstatt extra eine FileInfo-Instanz in der Schleife zu erstellen, würde ich das direkt übergeben, indem die Methode DirectoryInfo.EnumerateFiles() verwendet wird.
    @Drahuverar MessageBox.Show wäre die .NET-Lösung. ;)

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Jo, um was kurz zu testen ist's schon ok, aber generell ist es ein VB6-Relikt, der in .NET auf schlampige Art und Weise wieder implementiert wurde. ;)
    Hab's nur sicherheitshalber mal erwähnt. Aber nun BTT.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

    Drahuverar schrieb:

    ...dachte immer das ist so die "schnell ausgeben und schauen wie es aussieht" - Lösung
    Vor allem erkennt man daran, dass du noch immer den General-import auf den Deppen-Namespace drinne hast.

    Mal überlegt, den rauszuschmeissen? Auf Visual Studio - Empfohlene Einstellungen ist das haarklein erklärt und begründet.



    Btt-huch - also petaods würde ich so zusammenkürzen:

    VB.NET-Quellcode

    1. Imports System.IO
    2. '...
    3. Dim folder = "c:\temp\"
    4. For Each fi In New DirectoryInfo(folder).GetFiles
    5. If fi.CreationTime < DateTime.Now.AddDays(-30) Then fi.Delete()
    6. Next

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ErfinderDesRades“ ()