Как управлять ошибкой, когда код пытается удалить файл, который уже используется - PullRequest
0 голосов
/ 18 февраля 2019

Я довольно новичок в C #, и я надеюсь, что вы могли бы помочь мне.Я должен запустить 8 кодов параллельно.Семь кодов пишут каждые 10 секунд текстовый файл.В начале каждой минуты файлы копируются в другую папку.Восьмой код читает файлы, скопированные каждую минуту в 05 секунд.Моя проблема в том, что иногда 7 кодов могут задержать копирование файлов, и может случиться так, что он попытается удалить файлы, когда они уже открыты восьмым кодом, и сгенерирует ошибку System.IO.File.InternalDelete.Может кто-нибудь сообщить мне, как я могу справиться с этой ошибкой с помощью кода типа «При возобновлении ошибки далее», который я использую в VBA.

Заранее благодарю за ваш вклад.

Write_Lines(Output_SERVER);

if ( Directory.Exists(PC_DIRECTORY) && (BarsOfData(1).Status == EBarState.Close || Output_Calcul > Output_Date) )
{
    if (File.Exists(PC_DIRECTORY + @"\" + FILE_NAME)) { File.Delete(PC_DIRECTORY + @"\" + FILE_NAME); }
    File.Copy(SERVER_DIRECTORY + @"\" + FILE_NAME, PC_DIRECTORY + @"\" + FILE_NAME);
}

1 Ответ

0 голосов
/ 18 февраля 2019

Просто попробуйте перехватить вызовы File.Delete и File.Copy и обработать это исключение:

catch (System.IO.IOException ex)

Следовательно:

if ( Directory.Exists(PC_DIRECTORY) && (BarsOfData(1).Status == EBarState.Close || Output_Calcul > Output_Date) )
{
    try 
    {
        if (File.Exists(PC_DIRECTORY + @"\" + FILE_NAME)) 
        { 
            File.Delete(PC_DIRECTORY + @"\" + FILE_NAME);
        }
        File.Copy(SERVER_DIRECTORY + @"\" + FILE_NAME, PC_DIRECTORY + @"\" + FILE_NAME);
    } catch (System.IO.IOException ex) 
    {
        //handle the exception here 
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...