Правильный способ скопировать папку с помощью filesystemwatcher - PullRequest
0 голосов
/ 08 января 2020

Существует ли общепринятый способ или соглашение о программировании в этом случае?

По сути, я отслеживаю каталог с 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);
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...