Поиск…


Синтаксис

  • public FileSystemWatcher ()
  • public FileSystemWatcher (строка)
  • public FileSystemWatcher (строковый путь, строковый фильтр)

параметры

дорожка фильтр
Каталог для мониторинга в стандартной или универсальной нотации (UNC). Тип файлов для просмотра. Например, «* .txt» отслеживает изменения всех текстовых файлов.

Основной файл

В следующем примере создается FileSystemWatcher для просмотра каталога, указанного во время выполнения. Компонент настроен на просмотр изменений в LastWrite и LastAccess , создание, удаление или переименование текстовых файлов в каталоге. Если файл изменен, создан или удален, путь к файлу будет распечатан на консоль. Когда файл переименовывается, старые и новые пути печатаются на консоли.

Для этого примера используйте пространства имен System.Diagnostics и System.IO.

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

Общей ошибкой многих людей, начинающих работу с FileSystemWatcher, не учитывается, что событие FileWatcher возникает, как только создается файл. Однако для завершения файла может потребоваться некоторое время.

Пример :

Например, возьмите файл размером 1 ГБ. Запрос файла apr создается другой программой (Explorer.exe копирует ее откуда-то), но для завершения этого процесса потребуется несколько минут. Событие связано с тем, что время создания и вам нужно дождаться, когда файл будет готов к копированию.

Это метод проверки готовности файла.

 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
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow