2014-11-29 9 views
2

WinRT 앱에서 작동하는 즉 비동기 API를 사용하는 간단한 IsEmpty(StorageFolder directory) 메소드를 만들고 싶습니다. documentation for the StorageFolder class에 관련 방법이 표시되지 않으며 검색시 아무 것도 발견하지 못했습니다. 내가 놓친다면 미안해! WinRT (비동기 API)에서 디렉토리가 비어 있는지 확인하는 간단한 방법

나는 일 다음과 같은 방법을 만들기 위해 관리 :

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보다 높다는 것을 인식하기 전에 어떻게 든 하나의 항목 만 가져올 수 있는지 확실하지 않습니다. 나는 하스켈 언어 에서처럼 게으른 평가를 생각하고있다. 그러나 이것은 C#이다 ...). 그들이 할 수 있다면, 나는이 방법으로 더 평화로울 것입니다 :)

+0

가능한 복제본으로 간주되는 [link] (http://stackoverflow.com/questions/755574/how-to-quickly-check-if-folder-is-empty-net)는 이전 API와 관련이 있으며, WinRT에서 사용할 수 없습니다. 새 API에서 제공하는 비동기 메소드를 사용해야합니다. – CanisLupus

+0

중첩 폴더가 있거나 중첩 된 빈 디렉토리가 있으면 빈 것으로 간주합니까? –

+0

내가 만든 메서드에서와 같이 IsEmpty를 디렉터리 위에 호출하면 그 안에 폴더 나 파일이 없으면 true를 반환해야합니다. 폴더가 안에 있으면 해당 폴더가 비어 있더라도 비어 있지 않습니다. – CanisLupus

답변

2

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는 파일 또는 폴더를 모두 반환합니다. 이 호출은 카운트에 대해서만 신경 쓰는 것을 알지 못합니다. 컴파일러가 자동으로이를 인식하고 필터 된 버전을 자동으로 호출하도록 다시 작성하는 것은 의심 스럽습니다.

+0

하! 그게 더 좋아. 나는 그 방법의 행동에 대해서도 마찬가지입니다. 내 질문에 희망찬 생각이었다 :) – CanisLupus

+0

당신은 비 중개 장소 (자신의 개인 디렉토리)를 다룰 필요가 있다면 괜찮습니다. 중개 된 위치 (예 : 그림 라이브러리)를 확인해야하는 경우 저장소 API가 숨겨진 파일이나 시스템 파일을 반환하지 않으며 해당 위치에 Win32 API를 사용할 수 없으므로 안전한 것은 아닙니다. –