File System Watcher

 C Programming >> Programmazione C >  >> Tags >> File
File System Watcher

# IsFileReady

Un errore comune a molte persone che iniziano con FileSystemWatcher è non tenere conto del fatto che l'evento FileWatcher viene generato non appena il file viene creato. Tuttavia, il completamento del file potrebbe richiedere del tempo.

Esempio :

Prendi ad esempio una dimensione del file di 1 GB. Il file apr ask creato da un altro programma (Explorer.exe lo copia da qualche parte) ma ci vorranno pochi minuti per completare quel processo. L'evento viene generato in quel momento di creazione ed è necessario attendere che il file sia pronto per essere copiato.

Questo è un metodo per verificare se il file è pronto.


public static bool IsFileReady(String sFilename)
{
    // If the file can be opened for exclusive access it means that the file
    // is no longer locked by another process.
    try
    {
        using (FileStream inputStream = File.Open(sFilename, FileMode.Open, FileAccess.Read, FileShare.None))
        {
            if (inputStream.Length > 0)
            {
                return true;
            }
            else
            {
                return false;
            }

        }
    }
    catch (Exception)
    {
        return false;
    }
}

# FileWatcher di base

L'esempio seguente crea un FileSystemWatcher per guardare la directory specificata in fase di esecuzione. Il componente è impostato per controllare le modifiche in LastWrite e Ultimo accesso ora, la creazione, l'eliminazione o la ridenominazione dei file di testo nella directory. Se un file viene modificato, creato o eliminato, il percorso del file viene stampato sulla console. Quando un file viene rinominato, il vecchio e il nuovo percorso vengono stampati sulla console.

Utilizzare gli spazi dei nomi System.Diagnostics e System.IO per questo esempio.

FileSystemWatcher watcher;

private void watch()
{
  // Create a new FileSystemWatcher and set its properties.
  watcher = new FileSystemWatcher();
  watcher.Path = path;

 /* Watch for changes in LastAccess and LastWrite times, and
       the renaming of files or directories. */
  watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
                         | NotifyFilters.FileName | NotifyFilters.DirectoryName;

  // Only watch text files.      
  watcher.Filter = "*.txt*";

  // Add event handler.
  watcher.Changed += new FileSystemEventHandler(OnChanged);
  // Begin watching.      
  watcher.EnableRaisingEvents = true;
}

// Define the event handler.
private void OnChanged(object source, FileSystemEventArgs e)
{
  //Copies file to another directory or another action.
  Console.WriteLine("File: " +  e.FullPath + " " + e.ChangeType);
}

# Sintassi

  • FileSystemWatcher pubblico()
  • FileSystemWatcher pubblico(percorso stringa)
  • FileSystemWatcher pubblico(percorso stringa, filtro stringa)

# parametri

percorso filtro
La directory da monitorare, in notazione standard o UNC (Universal Naming Convention). Il tipo di file da guardare. Ad esempio, "*.txt" controlla le modifiche a tutti i file di testo.

No