Я пытаюсь решить проблему, когда пользователь может попытаться открыть файл OpenFileDialog
, который открывается Excel.Проверьте, заблокирован ли файл или ошибка catch для попытки открыть
Используя простой FileInfo.OpenRead()
, он зажимает IOException
: «Процесс не может получить доступ к файлу« cakes.xls », потому что он используется другим процессом». Это было бы хорошо отображать для пользователя, за исключением того, что пользователь фактически получит бессмысленность «Отладка строк ресурсов недоступна».
Кажется, невозможно открыть файл, который открыт другим процессом, так как с помощью FileInfo.Open(FileMode.Open, FileAccess.Read, FileShare.ReadWrite)
Патроны SecurityException
, «операции файла не разрешен доступ к пути..„C: \ любой \ cakes.xls“отказано», для любого файла. Скорее бесполезно.
Таким образом, вам не удалось найти способ проверить, заблокирован ли файл или попытаться поймать исключение IOException. Я не хочу поймать все IOExceptions и предположить, что все они заблокированы файловыми ошибками, поэтому мне нужно каким-то образом классифицировать этот тип исключений, как эта ошибка ... но вздор «отладочные строки ресурсов» вместе с тот факт, что это сообщение, вероятно, локализовано, делает его сложным. Я частично доверяю, поэтому я не могу использовать Marshal.GetHRForException
.
Итак: Есть ли разумный способ проверить, заблокирован ли файл или, по крайней мере, определить, возникла ли эта проблема, не просто поймав все IOExceptions?
Вы проверили различные свойства объекта IOException? Может быть, получить только часть сообщения, а не по умолчанию ToString() даст вам действительную обратную связь для пользователя? – jv42
К сожалению, это сообщение, которое переходит в строку «Отладка строк ресурсов недоступна» в выпуске. Стандартная клиентская версия среды выполнения Silverlight не содержит сообщений об ошибках. Метод ToString() дает не что иное, как трассировку стека. –