如何正确使用GetFolderAsync()?

时间:2014-01-25 04:25:41

标签: c# .net windows-runtime microsoft-metro windows-store-apps

在我的Windows应用商店应用中,我一直使用:

StorageFolder folder = await KnownFolders.DocumentsLibrary.GetFolderAsync("Folder Name");
if(folder != null)
{
    // Folder exists. Open it and load any existing files.
    IReadOnlyList<StorageFile> files = await folder.GetFilesAsync();

    // We now have the files. Do something with them.
}
else
{
    // Folder does not exist. Create it.
    folder.CreateFolderAsync("Folder Name", CreationCollisionOption.OpenIfExists);
}

但就在此,我想,为什么我不能这样做呢?

StorageFolder folder = await KnownFolders.DocumentsLibrary.CreateFolderAsync("Folder Name", CreationCollisionOption.OpenIfExists);

IReadOnlyList<StorageFile> files = await folder.GetFilesAsync();

if(files != null)
{
    // We now have the files. Do something with them.
}

据我所知,我编写的第一个代码块是“标准”方式 - 或者更常见的方式。但由于第二种方式也有效,我现在不确定使用哪种方式。它们都有效,但是我有什么理由不这样做吗?

1 个答案:

答案 0 :(得分:3)

第二块代码效果更好,为什么......?

试一试文件库中没有文件夹。

await KnownFolders.DocumentsLibrary.CreateFolderAsync("Folder Name", CreationCollisionOption.OpenIfExists);

如果不存在,CreationCollisionOption.OpenIfExists将创建一个特定的文件夹。

在第一个代码块中,else块中的行永远不会调用。

folder.CreateFolderAsync("Folder Name", CreationCollisionOption.OpenIfExists);

如果您认为自己没有尝试打开的文件夹,则会引发异常System.IO.FileNotFoundException

...

http://msdn.microsoft.com/en-us/library/windows/apps/windows.storage.creationcollisionoption.ASPx