Подтвердить что ты не робот

Хороший и чистый способ подождать, пока файл не закроется

Возможный дубликат:
Подождите, пока файл не будет разблокирован в .NET

У меня есть открытый файл, например .Doc или .txt, и мне нужно подождать, пока пользователь его не закроет. Я уже пробовал это, согласно Подождите, пока файл не будет разблокирован в .NET:

while (true)
{
    try
    {
      using (FileStream Fs = new FileStream(fileName, FileMode.Open, FileAccess.ReadWrite, FileShare.None, 100))
        {
            //the file is close
            break;
        }
    }
    catch (IOException)
    {
        //wait and retry
        Thread.Sleep(1000);
    }
}

Это хорошо работает, но можно ли найти решение без try/catch и обработчика исключения?

4b9b3361

Ответ 1

К сожалению нет, другого пути нет.

В API нет события, которое будет срабатывать, когда файл разблокирован или что-то еще удобное.

Повторная попытка с ожиданием - лучшее решение с текущим API.

Ответ 2

Для одного, однако, не используйте цикл, который у вас есть прямо сейчас, break ing, если нет исключения - выполните ваш фактический доступ к файлам в этом цикле using.

Затем, если файл открыт в известном процессе, вы можете получить его объект Process, установите EnableRaisingEvents на true и обработайте его событие Exited, чтобы повторить попытку. Тем не менее, он не защищен от сбоев, поэтому вы все равно будете обрабатывать исключения и использовать цикл.

Ответ 3

Вы можете совершать вызовы P/Invoke для собственной функции CreateFile, а затем анализировать код ошибки. Однако попытка/улов по-прежнему будет необходима.