Как определить HResult для исключения System.IO.IOException?

Свойство System.Exception.HResult защищено. Как я могу заглянуть в исключение и получить HResult, не прибегая к размышлениям или другим уродливым взломам?

Вот ситуация:
Я хочу написать инструмент резервного копирования, который открывает и читает файлы в системе. Я открываю файл с помощью FileAccess.Read и FileShare.ReadWrite, в соответствии сэто руководствопотому что мне все равно, открыт ли файл для записи в тот момент, когда я его читаю.

В некоторых случаях, когда файл, который я читаю, открывается другим приложением, метод System.IO.FileStream.Read () выдает исключение System.IO.IOException: «Процесс не может получить доступ к файлу, поскольку другой процесс заблокировал часть файл". Этоошибка 33или я думаю HResult 0x80070021. [РЕДАКТИРОВАТЬ: Я верю, что это может быть возвращено, когда другой процесс вызываетLockFileEx заблокировать диапазон байтов в файле.]

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

Как я могу отличить IOException по этой причине от других? Я могу думать об этих способах:

личное размышление - не хочу этого делать. Перф будет вонять.вызовите Exception.ToString () и проанализируйте строку. Чувствует себя счастливым. Не будет работать в версиях i18n.

Мне не нравятся эти варианты. Нет ли лучшего, более чистого пути?

Я просто искал вокруг и нашелSystem.Runtime.InteropServices.Marshal.GetHRForException, Будет ли это возвращать Uint как 0x80070021?

Ответы на вопрос(4)

Ваш ответ на вопрос