2016-12-03 4 views
0

「DeleteAsync」はファイルを削除しませんが、「File.Delete」はそれを実行する理由を知りました。誰かが私にこれを説明することはできますか?最初に私はファイルが開いていると思うが、ファイルが開いている場合は "File.Delete"もそれを削除してはならないか... ...?"DeleteAsync"と "File.Delete"の違いと、なぜ "DeleteAsync"でファイルが削除されないのですか?

private static async void FILESYSTEM_RemoveVideoPosterIfExist(string posterFileNameOnStorage) 
{ 
    IStorageItem videoPosterIStorageItem = await ApplicationData.Current.LocalFolder.TryGetItemAsync(SYSTEM_UserVideoPosterFolder + @"\" + DATABASE_SelectedUserInformation.UserName + "." + SYSTEM_UserPosterFolderExtension + @"\" + posterFileNameOnStorage); 
    if (videoPosterIStorageItem != null) 
    { 
     try 
     { 
      //Why this doesn't delete file... 
      await videoPosterIStorageItem.DeleteAsync(StorageDeleteOption.PermanentDelete); 
     } 
     catch 
     { 
      //But this one will delete file. 
      StorageFolder applicationStorageFolder = await ApplicationData.Current.LocalFolder.GetFolderAsync(SYSTEM_UserVideoPosterFolder + @"\" + DATABASE_SelectedUserInformation.UserName + "." + SYSTEM_UserPosterFolderExtension + @"\"); 
      File.Delete(applicationStorageFolder.Path + @"\" + posterFileNameOnStorage); 
     } 
    } 
} 
+2

例外をスローしている場合は、例外が発生している理由を調べる必要があります。また、これがイベントハンドラでない限り、 'async void'を使うべきではありません。 –

+0

タスクの代わりに非同期ボイドを使用すべきではない理由を簡単に説明できますか?私は答えを感謝します。 – Weissu

+0

ああ、私はちょうどそれを得た! – Weissu

答えて

2

理由は、非同期的にファイルを削除するネイティブ関数が存在しないことである可能性が高いです。管理対象APIは、一般に、アンマネージドAPIのラッパーです。

この

Why isn't there an asynchronous file delete in .net?

​​

これが役に立てば幸いで見てみましょう!

関連する問題