C# Language
FileSystemWatcher
Sök…
Syntax
- public FileSystemWatcher ()
- public FileSystemWatcher (strängväg)
- public FileSystemWatcher (strängväg, strängfilter)
parametrar
väg | filtrera |
---|---|
Katalogen för att övervaka, i standard- eller UNC-notation (Universal Naming Convention). | Typen av filer att titta på. Till exempel "* .txt" tittar på ändringar i alla textfiler. |
Grundläggande FileWatcher
Följande exempel skapar en FileSystemWatcher
att titta på den katalog som anges vid körtid. Komponenten är inställd på att leta efter ändringar i LastWrite och LastAccess- tid, skapande, radering eller byte av textfiler i katalogen. Om en fil ändras, skapas eller raderas, skrivs sökvägen till filen till konsolen. När en fil byts om, skrivs de gamla och nya banorna ut på konsolen.
Använd namnområdena System.Diagnostics och System.IO för detta exempel.
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
Ett vanligt misstag för många som börjar med FileSystemWatcher tar inte hänsyn till att FileWatcher-händelsen tas upp så snart filen skapas. Det kan dock ta lite tid innan filen är klar.
Exempel :
Ta till exempel en filstorlek på 1 GB. Filen efterfrågan skapad av ett annat program (Explorer.exe kopierar det någonstans) men det tar några minuter att slutföra processen. Händelsen höjs den skapelsestiden och du måste vänta på att filen är redo att kopieras.
Detta är en metod för att kontrollera om filen är klar.
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;
}
}