我想创建一个适用于 WinRT 应用程序的简单IsEmpty(StorageFolder directory)
方法,即使用异步 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 和 GetFolderAsync 的异步调用是否在返回之前获取目录中的每个文件/文件夹,或者它们是否只能以某种方式获取单个项目,然后才意识到 Count 将高于 0(我正在考虑惰性计算,就像在 Haskell 语言中一样,但这是 C#...如果可以的话,我会更放心这种方法:)
StorageFolder.GetItemsAsync(0,1( 将检索第一个文件或子文件夹:
public static async Task<bool> IsEmpty(StorageFolder directory)
{
var items = await directory.GetItemsAsync(0,1);
return items.Count == 0;
}
GetFilesAsync 和 GetFolderAsync 将返回所有文件或文件夹。这些调用不知道你只会关心计数,我怀疑编译器是否足够聪明,能够意识到这一点并重写调用以自动使用过滤版本。