C# Language
FileSystemWatcher
Поиск…
Синтаксис
- 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;
}
}