Frage

Ich baue eine C # Anwendung, die ein bestimmtes Verzeichnis für Änderungen und Ergänzungen und Speichern der Informationen in einer Datenbank überwacht.

Ich möchte Überprüfung jede einzelne Datei für Änderungen vermeiden, aber ich bin nicht sicher, ob ich die Datei vollständig Zugriffszeit vertrauen können.

Was wäre die beste Methode für die Verwendung kürzlich geänderten Dateien in einem Verzeichnis zu bekommen?

Es würde nur für Änderungen überprüfen, wenn der Benutzer fragt sie, es wird nicht ein ständig laufender Service sein.

War es hilfreich?

Lösung

Hmm ... interessante Frage. Zunächst möchte ich Sie auf dem Filesystemwatcher Klasse . Wenn Sie es gehen müssen, arbeiten jedoch auf Benutzeranforderung, dann würde es scheinen Sie das Verzeichnis info speichern off müssen eventuell zunächst und dann jedes Mal die Benutzeranforderungen vergleichen. Ich würde wahrscheinlich mit einem Filesystemwatcher gehen und nur irgendwie Ihre Ergebnisse speichern aus.

Andere Tipps

Verwenden Sie das Filesystemwatcher-Objekt. Hier ist ein Code zu tun, was Sie suchen.

    // Declares the FileSystemWatcher object
    FileSystemWatcher watcher = new FileSystemWatcher(); 

    // We have to specify the path which has to monitor

     watcher.Path = @"\\somefilepath";     

    // This property specifies which are the events to be monitored
     watcher.NotifyFilter = NotifyFilters.LastAccess |
       NotifyFilters.LastWrite | NotifyFilters.FileName | notifyFilters.DirectoryName; 
    watcher.Filter = "*.*"; // Only watch text files.

    // Add event handlers for specific change events...

    watcher.Changed += new FileSystemEventHandler(OnChanged);
    watcher.Created += new FileSystemEventHandler(OnChanged);
    watcher.Deleted += new FileSystemEventHandler(OnChanged);
    watcher.Renamed += new RenamedEventHandler(OnRenamed);
    // Begin watching.
    watcher.EnableRaisingEvents = true;


    // Define the event handlers.
    private static void OnChanged(object source, FileSystemEventArgs e)
    {
    // Specify what is done when a file is changed, created, or deleted.
    }

    private static void OnRenamed(object source, RenamedEventArgs e)
    {
    // Specify what is done when a file is renamed.
    }

Ich denke, was Sie wollen, ist durch die zur Verfügung gestellt Filesystemwatcher Klasse.

Dieses Tutorial beschreibt, wie es verwenden, um ein Verzeichnis für Änderungen in einem einfachen Windows-Dienst zu überwachen; Wie man ein einfaches Penguin Computing Windows-Dienst in C # implementieren

Wenn Sie es nur zu überprüfen, wenn der Benutzer fragt dann lieber die ganze Zeit, nicht das Filesystemwatcher verwenden. Vor allem, wenn es eine gemeinsame Ressource - das letzte, was Sie wollen, ist 50 Client-Rechner das gleiche freigegebene Verzeichnis zu beobachten.

Es ist wahrscheinlich nur ein Tippfehler, aber man sollte nicht auf Dateizugriffszeit suchen, möchten Sie in der Dateibearbeitungszeit suchen Änderungen aufzunehmen. das ist noch nicht zuverlässig.

Was ich tun würde, ist eine Art Prüfsumme Funktion auf dem Dateidatum und Byte-Größe oder anderen Dateisystemeigenschaften zu implementieren. Auf diese Weise würde ich nicht für Änderungen in der vollständigen Datei suchen -. Nur die Eigenschaften davon und ich kann es auf Wunsch tun, anstatt zu versuchen, eine Verbindung zu einer Remote-Ressource zu halten, es zu überwachen

Eine schwerere Lösung wäre es umgekehrt zu tun, und installieren Sie einen Dienst auf dem Rechner des gemeinsam genutzten Laufwerk-Hosting, die die Dateien überwachen können und notieren Sie sich die Änderungen vornehmen. Dann könnten Sie den Dienst abfragen, anstatt die Dateien überhaupt zu berühren -. Aber es ist wahrscheinlich übertrieben

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top