C# Language
FileSystemWatcher
Suche…
Syntax
- public FileSystemWatcher ()
- public FileSystemWatcher (String-Pfad)
- public FileSystemWatcher (String-Pfad, String-Filter)
Parameter
Pfad | Filter |
---|---|
Das zu überwachende Verzeichnis in Standard- oder UNC-Notation (Universal Naming Convention). | Die Art der Dateien, die angesehen werden sollen. Zum Beispiel überwacht "* .txt" alle Textdateien auf Änderungen. |
Grundlegender FileWatcher
Im folgenden Beispiel wird ein FileSystemWatcher
, um das zur Laufzeit angegebene Verzeichnis zu überwachen. Die Komponente ist so eingestellt, dass sie nach Änderungen in der Zeit von LastWrite und LastAccess , nach dem Erstellen, Löschen oder Umbenennen von Textdateien im Verzeichnis sucht . Wenn eine Datei geändert, erstellt oder gelöscht wird, wird der Pfad zur Datei an die Konsole gedruckt. Wenn eine Datei umbenannt wird, werden der alte und der neue Pfad auf der Konsole gedruckt.
Verwenden Sie für dieses Beispiel die Namespaces System.Diagnostics und 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
Ein häufiger Fehler, den viele Leute mit FileSystemWatcher beginnen, berücksichtigt nicht, dass das FileWatcher-Ereignis ausgelöst wird, sobald die Datei erstellt wird. Es kann jedoch einige Zeit dauern, bis die Datei fertig ist.
Beispiel :
Nehmen Sie zum Beispiel eine Dateigröße von 1 GB. Die Datei wurde von einem anderen Programm erstellt (Explorer.exe kopiert sie von irgendwo), es dauert jedoch einige Minuten, bis der Vorgang abgeschlossen ist. Das Ereignis wird zu diesem Zeitpunkt ausgelöst, und Sie müssen warten, bis die Datei zum Kopieren bereit ist.
Dies ist eine Methode, um zu überprüfen, ob die Datei bereit ist.
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;
}
}