C# Language
FileSystemWatcher
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;
}
}