Szukaj…


Składnia

  • public FileSystemWatcher ()
  • public FileSystemWatcher (ścieżka do łańcucha)
  • public FileSystemWatcher (ścieżka łańcucha, filtr ciągu)

Parametry

ścieżka filtr
Katalog do monitorowania w notacji standardowej lub Universal Naming Convention (UNC). Rodzaj plików do obejrzenia. Na przykład „* .txt” obserwuje zmiany we wszystkich plikach tekstowych.

Basic FileWatcher

Poniższy przykład tworzy FileSystemWatcher do oglądania katalogu określonego w czasie wykonywania. Komponent jest ustawiony na oglądanie zmian w LastWrite i LastAccess czasu, tworzenie, usuwanie lub zmiana nazwy plików tekstowych w katalogu. Jeśli plik zostanie zmieniony, utworzony lub usunięty, ścieżka do pliku zostanie wydrukowana w konsoli. Po zmianie nazwy pliku stare i nowe ścieżki są drukowane w konsoli.

W tym przykładzie użyj przestrzeni nazw System.Diagnostics i 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

Częstym błędem wielu osób rozpoczynających pracę z FileSystemWatcher nie jest wzięcie pod uwagę, że zdarzenie FileWatcher jest wywoływane natychmiast po utworzeniu pliku. Jednak ukończenie pliku może zająć trochę czasu.

Przykład :

Weźmy na przykład rozmiar pliku 1 GB. Plik apr ask utworzony przez inny program (Explorer.exe kopiuje go gdzieś), ale zajmie to minuty, aby zakończyć ten proces. Wydarzenie jest podnoszone, że czas utworzenia i musisz poczekać, aż plik będzie gotowy do skopiowania.

Jest to metoda sprawdzania, czy plik jest gotowy.

 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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow