Domanda

Sto creando un'applicazione C # che monitorerà una directory specificata per modifiche e aggiunte e memorizzerà le informazioni in un database.

Vorrei evitare di controllare ogni singolo file per eventuali modifiche, ma non sono sicuro di potermi fidare completamente del tempo di accesso al file.

Quale sarebbe il metodo migliore da utilizzare per ottenere file modificati di recente in una directory?

Verificherebbe la presenza di modifiche solo quando l'utente lo richiede, non sarà un servizio costantemente in esecuzione.

È stato utile?

Soluzione

Hmm ... domanda interessante. Inizialmente ti indirizzerei alla FileSystemWatcher . Se hai intenzione di farlo funzionare, tuttavia, su richiesta dell'utente, sembrerebbe che potresti dover archiviare inizialmente le informazioni della directory e confrontarle ogni volta che l'utente lo richiede. Probabilmente andrei con un FileSystemWatcher e archiverei comunque i tuoi risultati.

Altri suggerimenti

Utilizza l'oggetto FileSystemWatcher. Ecco un po 'di codice per fare quello che stai cercando.

    // 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.
    }

Penso che ciò che desideri sia fornito da FileSystemWatcher classe.

Questo tutorial descrive come usarlo per monitorare una directory per le modifiche in un semplice servizio di Windows; Come implementare un semplice servizio Windows di filewatcher in C #

Se è necessario solo per verificare quando l'utente lo richiede piuttosto che per tutto il tempo, non utilizzare FileSystemWatcher. Soprattutto se si tratta di una risorsa condivisa, l'ultima cosa che vuoi è che 50 macchine client guardino la stessa directory condivisa.

Probabilmente è solo un refuso, ma non dovresti guardare il tempo di accesso al file, vuoi guardare il tempo di modifica del file per raccogliere le modifiche. Anche questo non è affidabile.

Quello che vorrei fare è implementare una sorta di funzione di checksum sulla data del file e la dimensione dei byte, o altre proprietà del file system. In questo modo non cercherei cambiamenti nel file completo - solo le sue proprietà e posso farlo su richiesta, piuttosto che cercare di mantenere una connessione a una risorsa remota per monitorarlo.

Una soluzione più pesante sarebbe quella di fare il contrario, e installare un servizio sul computer che ospita l'unità condivisa in grado di monitorare i file e prendere nota delle modifiche. Quindi potresti interrogare il servizio piuttosto che toccare i file, ma probabilmente è eccessivo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top