Buscar..


Sintaxis

  • FileSystemWatcher público ()
  • FileSystemWatcher público (ruta de cadena)
  • FileSystemWatcher público (ruta de la cadena, filtro de cadena)

Parámetros

camino filtrar
El directorio para monitorear, en notación estándar o Convención de nomenclatura universal (UNC). El tipo de archivos para ver. Por ejemplo, "* .txt" busca cambios en todos los archivos de texto.

FileWatcher básico

El siguiente ejemplo crea un FileSystemWatcher para ver el directorio especificado en el tiempo de ejecución. El componente está configurado para observar los cambios en el tiempo de LastWrite y LastAccess , la creación, eliminación o cambio de nombre de los archivos de texto en el directorio. Si un archivo se cambia, se crea o se elimina, la ruta al archivo se imprime en la consola. Cuando se cambia el nombre de un archivo, las rutas antiguas y nuevas se imprimen en la consola.

Utilice los espacios de nombres System.Diagnostics y System.IO para este ejemplo.

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);
}

IsFileReady

Un error común que mucha gente que comienza con FileSystemWatcher no tiene en cuenta que el evento FileWatcher se genera tan pronto como se crea el archivo. Sin embargo, puede llevar algo de tiempo completar el archivo.

Ejemplo :

Tome un tamaño de archivo de 1 GB, por ejemplo. El archivo apr pregunto creado por otro programa (Explorer.exe copiándolo desde algún lugar) pero tomará unos minutos completar este proceso. El evento se genera en el momento de la creación y debe esperar a que el archivo esté listo para copiarse.

Este es un método para verificar si el archivo está listo.

 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;
    }
}


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow