OpenFileDialog
ユーザーがExcelで開いているファイルをで開こうとする問題を処理しようとしています。
単純なを使用してFileInfo.OpenRead()
、IOException
「別のプロセスによって使用されているため、プロセスはファイル'cakes.xls'にアクセスできません。」これは、ユーザーが実際に「デバッグリソース文字列が利用できません」というナンセンスを取得することを除いて、ユーザーに表示するのに適しています。
FileInfo.Open(FileMode.Open, FileAccess.Read, FileShare.ReadWrite)
チャックを使用しているため、別のプロセスで開いているファイルを開くことはできないようですSecurityException
。「ファイル操作は許可されていません。パス'C:\ whatever\cakes.xls'へのアクセスは拒否されました。」むしろ役に立たない。
したがって、ファイルがロックされているかどうかを確認する方法を見つけるか、IOExceptionをキャッチしようとすることになります。すべてのIOExceptionをキャッチして、それらがすべてロックされたファイルエラーであると想定したくないので、このタイプの例外をこのエラーとして分類する何らかの方法が必要です...しかし、「リソース文字列のデバッグ」は事実とともにナンセンスですそのメッセージ自体がおそらくローカライズされているため、注意が必要です。私は部分的に信頼しているので、使用できませんMarshal.GetHRForException
。
したがって、ファイルがロックされているかどうかを確認する、または少なくともすべてのIOExceptionをキャッチせずにこの問題が発生したかどうかを判断する、賢明な方法はありますか?