2

我想创建一个IsEmpty(StorageFolder directory)适用于 WinRT 应用程序的简单方法,即使用异步 API。我在 StorageFolder 类的文档中没有看到相关方法,而且我在搜索中也没有找到任何东西。如果我错过了,我很抱歉!

我设法创建了以下方法,该方法有效:

public static async Task<bool> IsEmpty(StorageFolder directory)
{
    var files = await directory.GetFilesAsync();
    if (files.Count > 0)
    {
        return false;
    }

    var folders = await directory.GetFoldersAsync();
    if (folders.Count > 0)
    {
        return false;
    }

    return true;
}

但是......有更清洁的方法吗?本机或我可以编码...检查目录是否为空应该是一件简单的事情,但是我知道在尝试使用WinRT的异步API检查目录或文件是否存在之前,我遇到了问题.

我也不完全确定对 GetFilesAsync 和 GetFoldersAsync 的异步调用是否在返回之前获取目录中的每个文件/文件夹,或者它们是否可以在意识到 Count 将高于 0 之前以某种方式仅获取一个项目(我在想惰性求值,就像在 Haskell 语言中一样,但这是 C#...)。如果可以的话,我会对这种方法更放心:)

4

1 回答 1

3

存储文件夹。GetItemsAsync (0,1) 将检索第一个文件或子文件夹:

public static async Task<bool> IsEmpty(StorageFolder directory)
{
    var items = await directory.GetItemsAsync(0,1);
    return items.Count == 0;
}

GetFilesAsync 和 GetFoldersAsync 将返回所有文件或文件夹。这些调用不知道您只关心计数,我怀疑编译器是否足够聪明,能够意识到这一点并重写调用以自动使用过滤版本。

于 2014-11-30T07:24:29.687 回答