#c# #file-watcher
#c# #наблюдатель за файлами
Вопрос:
У меня есть некоторый архивный файл с данными, у меня есть какой-то поток, который записывает в этот архивный файл, в главном потоке у меня есть диспетчер файловой системы, который считывает содержимое файла при некоторых изменениях:
static FileSystemWatcher watcher = new FileSystemWatcher();
string archPath=@"C:arch.xml";
public MyClass()
{
watcher.Path = dir;
watcher.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.CreationTime;
watcher.Filter = Path.GetFileName("*" archPath);
watcher.Changed = OnFileChanged;
watcher.Created = OnFileCraeted;
watcher.EnableRaisingEvents = true;
}
public void OnFileChanged(object source, FileSystemEventArgs e)
{
try
{
watcher.EnableRaisingEvents = false;
LoadArchive();
}
finally
{
watcher.EnableRaisingEvents = true;
}
}
void LoadArchive()
{
DataSet ds = new DataSet();
ds.ReadXml(archPath); /// <----this line throws exeption
}
Исключение System.IO.IOException: процесс не может получить доступ к файлу ‘C:arch.xml ‘ потому что он используется другим процессом.
мой вопрос: Я хочу читать содержимое, когда происходят некоторые изменения, как избежать этого исключения?
Комментарии:
1. вы можете использовать временный файл
2. Файл должен быть открыт стороной, которая выполняет запись в файл в соответствующем
FileShare
режиме, чтобы разрешить последующее открытие файла.