Ermitteln von Erstelldatum (NACH Dateilöschung)

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Ermitteln von Erstelldatum (NACH Dateilöschung)

    Hi,

    ich habe ne etwas komische Aufgabe zu bewältigen.
    Und zwar:

    Das Programm reagiert auf die Windowsmeldung, wenn eine Datei in einem bestimmten Ordner gelöscht wird. Nun soll Sie dies aber nur dann auswerten, wenn die Datei ein bestimmtes Erstelldatum unterschreitet.

    Sprich: Datei älter als 20 Tage --> Reagieren

    Nun zu dem Problem... Einzeln alles nicht schwer... Aber wenn ich darauf reagiere wenn eine Datei gelöscht wird, ist sie zu diesem Zeitpunkt ja schon weg... Also kann ich von der Datei das Datum nicht auswerten.

    Hat jemand eine Idee wie ich daran kommen könnte?
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    komische Reihenfolge ? naja.

    Dann frag das Dataum vorher ab. Leg es in eine Variable.
    Solange du den Inhalt der Variable nicht löscht, kannst du jeder Zeit drauf zugreifen.

    Dim DieZeit As Date = "MeineDatei......
    MeineDatei. löschen
    Afragen DieZeit
    Korrekt.

    Das Programm überwacht mehrere Server... Und führt je nachdem bei Dateibewegungen bestimmte Aktionen aus.

    Und eine davon soll aufgerufen werden, wenn eine "alte" Datei zB. gelöscht wird.
    Ich habe KEINE Daten über die vorhandenen Dateien, da es einfach viel zu viele sind. Und zudem zu viele Bewegungen.

    Ich reagiere nur auf Events, wie zB. das Löschen einer Datei. Jedoch wenn das Event auftritt, ist logischerweise die Datei schon weg.
    Also ist über den herkömmlichen Weg eine Festellung des Erstell-Datums nicht mehr durchführbar. :/
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    und das Event "VorDateiGelöscht" gibts es natürlich nicht ... also sowas in der art wie zB. "BeforeResize" oder so ähnlich wie in VB

    wo kommt die gelöschte Datei hin ... direkt in /dev/null also nirvana oder ala Papierkorb ?

    auch wenn es viele Dateien sind wäre glaube ich die einfachste möglichkeit eine List des Directory im Programm zu halten und dann zu schauen was fehlt
    Hast du ne Info wie das per WMI geht?
    Bestenfalls ne Seite wo ich mich durchlesen kann?

    Kleiner Auszug zum "Wie"...

    VB.NET-Quellcode

    1. AddHandler ordnerUeberwacher.Deleted, AddressOf DS_del

    VB.NET-Quellcode

    1. Public Sub DS_del(ByVal source As Object, _
    2. ByVal e As FileSystemEventArgs)
    3. ...
    4. End Sub


    OrdnerUeberwacher ist ein System.IO.FileSystemWatcher
    usw.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D

    VB.NET-Quellcode

    1. Imports System.Management
    2. Public Class mainForm
    3. Private watchFileDel As ManagementEventWatcher
    4. 'Drive in der Form C: oder D: NICHT D:\
    5. 'pfad in der Form (zb für C:\Test) => \\Test\\
    6. Private Sub StartWatching(Byval Path as String, ByVal Drive as String)
    7. Dim query As WqlEventQuery = New WqlEventQuery("__InstanceDeletionEvent", _
    8. New TimeSpan(0, 0, 2), _
    9. "TargetInstance isa 'CIM_DataFile' and TargetInstance.Drive ='" & Drive & "' AND TargetInstance.Path='" & Path & "'")
    10. watchFileDel = New ManagementEventWatcher(query)
    11. AddHandler watchFileDel.EventArrived, AddressOf FileDeleted
    12. watchFileDel .Start()
    13. End Sub
    14. Public Sub FileDeleted(ByVal sender As Object, ByVal e As EventArrivedEventArgs)
    15. Dim ev As ManagementBaseObject = e.NewEvent
    16. Dim objM As ManagementBaseObject = CType(ev("TargetInstance"), ManagementBaseObject)
    17. Debug.Print(objM("Name").ToString & " gelöscht")
    18. Debug.Print("ERSTELLT " & objM("CreationDate").ToString)
    19. End Sub
    20. End Class


    Allerdings könnte die Perfomance eventuell nicht ganz so gut sein.
    Ich kenne aber keine andere/bessere Lösung...
    Zu allen Objekten findest du nach kurzer Suche auch Beispiele und Erklärungen im Inet/MSDN

    Gruss Mono
    Das ist meine Signatur und sie wird wunderbar sein!
    Vielen vielen Dank :)
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    musste aber ziemlich auf System-Performance testen. Bei MS stand mal zum FilesystemWatcher, dass der das System runterziehen kann - insbes. wenn große Einheiten zu überwachen sind.

    btw: kann man nicht eiglich auch nur den Papierkorb auf Eingänge hin überwachen? wäre vielleicht!! pefomanter.