Как пропустить файлы, находящиеся в пользовательском NetCore 3 - PullRequest
1 голос
/ 27 мая 2020

Я пытаюсь запрограммировать службу windows, которая автоматически удаляет файл из указанной c папки. Но я столкнулся с ошибкой «Невозможно получить доступ к файлу, файл используется другим процессом / программой»

Я пытался сделать следующее, но все еще та же ошибка.

 string[] files = Directory.GetFiles(@"C:\Users\ASIM\AppData\Local\Temp");


      //  string[] directories = Directory.GetDirectories(@"C:\Users\ASIM\AppData\Local\Temp", "p*", SearchOption.TopDirectoryOnly);

        if (files != null || files.Length != 0)
        {

            {
                foreach (string f in files)
                {
                    try
                    {
                        File.Delete(f);
                    }
                    finally { }
                }
            }

        }

так как же пропустить удаление файла, если он уже используется?

1 Ответ

2 голосов
/ 27 мая 2020

Нет смысла проверять, можно ли удалить файл перед его удалением, потому что между вашей проверкой и удалением будет небольшое окно возможности, когда другой процесс откроет файл. Лучше всего попытаться удалить его и обработать исключение, если оно возникнет.

Ваш try / finally должен быть try / catch с соответствующим исключением:

try
{
   File.Delete(f);
}
catch(IOException ex)
{
   // Probably some logging here 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...