Чтение содержимого файла в файле при изменении файла

#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 режиме, чтобы разрешить последующее открытие файла.