2017-06-29 17 views
0

このコードは、スローされるときにAccessDeniedExceptionを捕捉しません。非同期関数で例外を処理する方法UWP App GetFileFromPathAsync(path);

なぜですか?

例外ハンドラはそれをキャッチしません。私は文書を完全に守ってきました。

auto fileOp = StorageFile::GetFileFromPathAsync(filePath); 
auto fileTask = create_task(fileOp);  
auto c1 = fileTask.then([](StorageFile^ file) { 
      //... 
      }).then([](task<StorageFile^> t) { 
       try { 
        auto ident = t.get(); 
       } 
       catch (const std::exception &e) { 
        auto msg = ref new MessageDialog("File not found."); 
       } 
       catch (AccessDeniedException^ e) { 
        auto msg = ref new MessageDialog("Access denied."); 
       } 
       catch (Exception^ e) { 
        auto msg = ref new MessageDialog("Unknown errer."); 
       } 
      }); 
+0

ノー、コードの作業を取得することができませんでしたが、私は見つけることができましたFileIOを使用して回避してください。私はまだここで何がうまくいかないのか分からない。 –

+0

これは奇妙です、私のコードは私の側でうまくいきます。新しい空のC++プロジェクトを試してみましたか?または何がうまくいかないかを知るために[mcve]を共有してください。 –

答えて

0

GetFileFromPathAsync方法でスローされた例外を処理するには、次のコードを試すことができます。

auto fileOp = StorageFile::GetFileFromPathAsync(filePath); 
auto fileTask = create_task(fileOp); 
auto c1 = fileTask.then([](task<StorageFile^> t) { 
    try 
    { 
     StorageFile^ file = t.get(); 
     ///... 
    } 
    catch (AccessDeniedException^) 
    { 
     auto msg = ref new MessageDialog("Access denied."); 
     create_task(msg->ShowAsync()); 
    } 
    catch (Exception^ e) { 
     auto msg = ref new MessageDialog(e->Message); 
     create_task(msg->ShowAsync()); 
    } 
}); 
関連する問題