【问题标题】:Differences between "DeleteAsync" and "File.Delete" and why "DeleteAsync" doesn't remove file?“DeleteAsync”和“File.Delete”之间的区别以及为什么“DeleteAsync”不删除文件?
【发布时间】:2016-12-03 11:17:15
【问题描述】:

想知道为什么“DeleteAsync”不会删除文件,但“File.Delete”会这样做。谁可以给我解释一下这个?起初我认为文件是打开的,但如果文件是打开的,“File.Delete”也不应该删除它,或者......?

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);
        }
    }
}

【问题讨论】:

  • 如果它抛出异常,您需要查看异常以找出它不工作的原因。此外,除非这是一个事件处理程序,否则您不应使用 async void

标签: c# file windows-10-universal storagefolder


【解决方案1】:

原因很可能是没有异步删除文件的原生函数。托管 API 通常是非托管 API 的包装器。

看看这个

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

 FileInfo fi = new FileInfo(fileName);
 await fi.DeleteAsync(); // C# 5
 fi.DeleteAsync().Wait(); // C# 4

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2017-09-18
    • 2018-05-10
    • 2021-08-09
    • 1970-01-01
    • 1970-01-01
    • 2020-11-27
    • 2014-07-10
    • 2010-12-19
    • 2011-04-16
    相关资源
    最近更新 更多