Простой способ проверить, является ли каталог пустым в WinRT (async API)
Я хотел создать простой 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;
}
Но... есть ли более чистый путь? Либо встроенный, либо код, который я мог бы написать... Должно быть легко проверить, является ли каталог пустым, но я знаю, что раньше я сталкивался с проблемами, когда просто пытался проверить, существует ли каталог или файл с использованием асинхронного API WinRT.,
Я также не совсем уверен, получают ли асинхронные вызовы GetFilesAsync и GetFoldersAsync каждый файл / папку в каталоге перед возвратом, или они могут каким-то образом получить только один элемент, прежде чем понять, что Count будет больше 0 (я думаю, ленивой оценки, как в языке Haskell, но это C#...). Если бы они могли, я был бы более мирным с этим методом:)
1 ответ
StorageFolder. GetItemsAsync(0,1) извлечет первый файл или подпапку:
public static async Task<bool> IsEmpty(StorageFolder directory)
{
var items = await directory.GetItemsAsync(0,1);
return items.Count == 0;
}
GetFilesAsync и GetFoldersAsync вернут все файлы или папки. Эти вызовы не знают, что вы будете заботиться только о количестве, и я сомневаюсь, что компилятор достаточно умен, чтобы понять это и переписать вызовы для использования отфильтрованных версий автоматически.