3

StorageFileX秒ごとに分離ストレージに保存されているファイル(オブジェクトへの参照)をポーリングするメトロスタイルアプリがあります。

そのPDFファイルであり、私のアプリでは、ユーザーがネイティブのReaderアプリを使用してドキュメントを開き、ドキュメントに変更を加えることを許可しています。

私の問題は、ドキュメントをポーリングOpenStreamForReadAsyncしているStorageFileときに呼び出すことですが、ユーザーがリーダーアプリでドキュメントに加えられた変更を保存している正確なタイミングでこれを行うと、Access denied例外がスローされます。

これは、Windowsがファイルに書き込んでいるためだと思いますが、これは問題ありません。ローカルStorageFile参照を照会して、ファイルを開くことが許可されているかどうかを確認する方法を知る必要があります。OpenStreamForReadAsync(理想的には、try catchにラップされて呼び出すことはありません)。

4

1 に答える 1

4

Windowsチームは、try/catchを実行するように指示します。それは私がFile.Exists()APIを要求したときに彼らが私に言ったことです。

理由は次のとおりです。探しているAPIが存在するとします...そのAPIを呼び出してからファイルを開こうとするまでの数ミリ秒の間に、ファイルが開かれる/削除される/名前が変更されるとどうなりますか?ブーム!元の例外に戻り、再現が難しいクラッシュを回避するためにtry/catchを実行する必要があります。とにかくこの例外をキャッチする必要があるので、例外をキャッチした方がよいでしょう。File.Existsまたは探しているAPIを提供しないことにより、ユーザーがこれらのまれな競合状態のバグに遭遇しないように、例外をキャッチするように強制されます。

于 2012-07-03T14:53:54.573 に答える