0

StorageFolderオブジェクトがあり、その内部(最初または最後ではない)にコロンを含む名前のフォルダーを作成しようとすると、HRESULT 80004005(HRESULT E_FAIL)でCOMエラーが発生します。

例:await ApplicationData.Current.TemporaryFolder.CreateFolderAsync( "abc:xyz"、CreationCollisionOption.OpenIfExists);

コロンが先頭または末尾にある場合、「ファイル名、ディレクトリ名、またはボリュームラベルの構文が正しくありません」というメッセージが表示されたHRESULT8007007bが表示されます。それはいいです。

他の無効な文字をチェックしましたが、コロンだけがE_FAILにつながります。

ユーザーがフォルダ名を入力した場合、これは問題になる可能性があります。もちろん、回避策はファイル名のコロンをチェックすることです。

E_FAILエラーの考えられる理由を知っている人はいますか?COMはフォルダ名がURIで始まると考えていると思いますが、もちろんそれがどのようなURIであるかを理解することはできません。

4

1 に答える 1

4

さて、COMの悪名高いエラー報告が復讐に戻ってきました。何年にもわたる.NETの優れた有益な例外から甘やかされてきましたが、その敷物はWinRTによって引っ張られました。COMは基盤となる相互運用メカニズムであり、HRESULTはエラーが報告される方法です。

E_FAILは正規のエラーコードであり、「不特定のエラー」で取得できる唯一の説明テキストです。これは正確ですが、そのコードを処理したMicrosoftプログラマーは、より説明的なエラーを生成できなかったか、生成したくありませんでした。もう1つのすばらしい問題は、E_UNEXPECTEDです。これは、「壊滅的な失敗」に相当します。「壊滅的」という用語は、実際にエラーメッセージが表示された場合の値を指します。

多少推測すると、「abc:xyz」パス文字列は実際には有効です。これは、ファイル「abc」に保存されている「xyz」という名前の代替データストリームを指します。したがって、パス文字列をチェックしても、最初は悪臭を放つことはありません。ただし、ファイルではなく、その名前でフォルダを作成しています。フォルダに代替データストリームを含めることはできません。どうやらこれは非常に遅く発見され、それでもより正確なエラーコードを生成するには遅すぎます。Windowsエラーが発生するはずであり、0x8007000でor-ingすることにより、HRESULTで適切にラップされますが、推測できない理由で実行されませんでした。

これに関するフィードバックを送信する方法はありません。Windowsグループには、DevDivのconnect.microsoft.comに相当するものがありません。エラーの原因を知っているのは良いことです。

于 2012-10-06T12:38:35.583 に答える