Ответ 1
К сожалению нет, другого пути нет.
В API нет события, которое будет срабатывать, когда файл разблокирован или что-то еще удобное.
Повторная попытка с ожиданием - лучшее решение с текущим API.
Возможный дубликат:
Подождите, пока файл не будет разблокирован в .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 и обработчика исключения?
К сожалению нет, другого пути нет.
В API нет события, которое будет срабатывать, когда файл разблокирован или что-то еще удобное.
Повторная попытка с ожиданием - лучшее решение с текущим API.
Для одного, однако, не используйте цикл, который у вас есть прямо сейчас, break
ing, если нет исключения - выполните ваш фактический доступ к файлам в этом цикле using
.
Затем, если файл открыт в известном процессе, вы можете получить его объект Process
, установите EnableRaisingEvents
на true
и обработайте его событие Exited
, чтобы повторить попытку. Тем не менее, он не защищен от сбоев, поэтому вы все равно будете обрабатывать исключения и использовать цикл.
Вы можете совершать вызовы P/Invoke для собственной функции CreateFile, а затем анализировать код ошибки. Однако попытка/улов по-прежнему будет необходима.