Существует ли общепринятый способ или соглашение о программировании в этом случае?
По сути, я отслеживаю каталог с FileSystemWatcher
объектом в C#. Когда возникает событие OnChanged
, я хочу скопировать файлы в другую папку. Это прекрасно работает с отдельными файлами, но когда я вручную перемещаю другую папку в контролируемую папку, она выдает UnauthorizedAccessException
, когда над ней выполняются задачи.
Как это следует делать? Я попробовал следующий способ, но я не уверен, что это правильный способ сделать это. Даже после того, как ОС закончила копировать папку, программа все равно ловит исключение. И даже если это не так, это кажется чрезвычайно утомительным способом сделать это. Любые альтернативы?
private void OnChanged(object source, FileSystemEventArgs e)
{
Stopwatch sw = new Stopwatch();
sw.Start();
FileInfo file = new FileInfo(e.FullPath);
if (File.Exists(DataMember.targetDirectory + file.Name))
{
File.Delete(DataMember.targetDirectory + file.Name);
}
while (true)
{
try
{
Console.WriteLine("Trying to copy...");
File.Copy(DataMember.sourceDirectory + file.Name, DataMember.targetDirectory + file.Name);
Console.WriteLine("Finished");
break;
}
catch (UnauthorizedAccessException)
{
Console.WriteLine("Exception caught!");
Thread.Sleep(60000);
}
}
sw.Stop();
Console.WriteLine("Time elapsed: {0}",sw.Elapsed);
}