폴더, 라이브러리, 디바이스 또는 네트워크 위치에서 파일 및 폴더에 접근합니다. 파일 및 폴더 쿼리를 생성하여 위치의 파일 및 폴더를 쿼리할 수도 있습니다.
WinUI 앱의 데이터를 저장하는 방법에 대한 지침은 ApplicationData 클래스를 참조하세요.
메모
전체 샘플은 폴더 열거형 샘플을 참조하세요.
사전 요구 사항
WinUI 앱에 대한 비동기 프로그래밍 이해
C#에서 비동기 앱을 작성하는 방법을 알아볼 수 있습니다. C# 또는 Visual Basic에서 비동기 API 호출을 참조하세요. C++/WinRT에서 비동기 앱을 작성하는 방법을 알아보려면 C++/WinRT를 사용한 동시성 및 비동기 작업을 참조하세요.
위치에 대한 액세스 권한
예를 들어 이러한 예제의 코드에는 picturesLibrary 기능이 필요하지만 위치에 다른 기능이 필요하거나 기능이 전혀 필요하지 않을 수 있습니다. 자세한 내용은 파일 액세스 권한을 참조하세요.
위치에서 파일 및 폴더를 열거하십시오
메모
picturesLibrary 기능을 선언해야 합니다.
이 예제에서는 먼저 StorageFolder.GetFilesAsync 메서드를 사용하여 KnownFolders.PicturesLibrary (하위 폴더 아님)의 루트 폴더에 있는 모든 파일을 가져와서 각 파일의 이름을 나열합니다. 다음으로 StorageFolder.GetFoldersAsync 메서드를 사용하여 PicturesLibrary의 모든 하위 폴더를 가져와서 각 하위 폴더의 이름을 나열합니다.
StorageFolder picturesFolder = KnownFolders.PicturesLibrary;
StringBuilder outputText = new StringBuilder();
IReadOnlyList<StorageFile> fileList = await picturesFolder.GetFilesAsync();
outputText.AppendLine("Files:");
foreach (StorageFile file in fileList)
{
outputText.Append(file.Name + "\n");
}
IReadOnlyList<StorageFolder> folderList = await picturesFolder.GetFoldersAsync();
outputText.AppendLine("Folders:");
foreach (StorageFolder folder in folderList)
{
outputText.Append(folder.DisplayName + "\n");
}
// MainPage.h
// In MainPage.xaml: <TextBlock x:Name="OutputTextBlock"/>
#include <winrt/Windows.Storage.h>
#include <sstream>
...
Windows::Foundation::IAsyncAction ExampleCoroutineAsync()
{
// Be sure to specify the Pictures Folder capability in your Package.appxmanifest.
Windows::Storage::StorageFolder picturesFolder{
Windows::Storage::KnownFolders::PicturesLibrary()
};
std::wstringstream outputString;
outputString << L"Files:" << std::endl;
for (auto const& file : co_await picturesFolder.GetFilesAsync())
{
outputString << file.Name().c_str() << std::endl;
}
outputString << L"Folders:" << std::endl;
for (auto const& folder : co_await picturesFolder.GetFoldersAsync())
{
outputString << folder.Name().c_str() << std::endl;
}
OutputTextBlock().Text(outputString.str().c_str());
}
메모
C#에서는 await 연산자를 사용하는 메서드의 메서드 선언에 비동기 키워드를 넣어야 합니다.
또는 StorageFolder.GetItemsAsync 메서드를 사용하여 특정 위치에서 모든 항목(파일 및 하위 폴더 모두)을 가져올 수 있습니다. 다음 예제에서는 GetItemsAsync 메서드를 사용하여 KnownFolders.PicturesLibrary (하위 폴더 아님)의 루트 폴더에 있는 모든 파일 및 하위 폴더를 가져옵니다. 그런 다음, 각 파일 및 하위 폴더의 이름을 나열합니다. 항목이 하위 폴더인 경우, 이름에 "folder"가 추가됩니다.
StorageFolder picturesFolder = KnownFolders.PicturesLibrary;
StringBuilder outputText = new StringBuilder();
IReadOnlyList<IStorageItem> itemsList = await picturesFolder.GetItemsAsync();
foreach (var item in itemsList)
{
if (item is StorageFolder)
{
outputText.Append(item.Name + " folder\n");
}
else
{
outputText.Append(item.Name + "\n");
}
}
// MainPage.h
// In MainPage.xaml: <TextBlock x:Name="OutputTextBlock"/>
#include <winrt/Windows.Storage.h>
#include <sstream>
...
Windows::Foundation::IAsyncAction ExampleCoroutineAsync()
{
// Be sure to specify the Pictures Folder capability in your Package.appxmanifest.
Windows::Storage::StorageFolder picturesFolder{
Windows::Storage::KnownFolders::PicturesLibrary()
};
std::wstringstream outputString;
for (Windows::Storage::IStorageItem const& item : co_await picturesFolder.GetItemsAsync())
{
outputString << item.Name().c_str();
if (item.IsOfType(Windows::Storage::StorageItemTypes::Folder))
{
outputString << L" folder" << std::endl;
}
else
{
outputString << std::endl;
}
OutputTextBlock().Text(outputString.str().c_str());
}
}
위치에서 파일을 쿼리하고 일치하는 파일을 열거합니다.
이 예제에서는 한 달별로 그룹화된 KnownFolders.PicturesLibrary 의 모든 파일을 쿼리하며, 이번에는 예제가 하위 폴더로 재귀됩니다. 먼저 StorageFolder.CreateFolderQuery를 호출하고 CommonFolderQuery.GroupByMonth 값을 메서드에 전달합니다. 그러면 StorageFolderQueryResult 개체가 표시됩니다.
다음으로 가상 폴더를 나타내는 StorageFolder 개체를 반환하는 StorageFolderQueryResult.GetFoldersAsync를 호출합니다. 이 경우 월별로 그룹화되므로 가상 폴더는 각각 같은 달의 파일 그룹을 나타냅니다.
StorageFolder picturesFolder = KnownFolders.PicturesLibrary;
StorageFolderQueryResult queryResult =
picturesFolder.CreateFolderQuery(CommonFolderQuery.GroupByMonth);
IReadOnlyList<StorageFolder> folderList =
await queryResult.GetFoldersAsync();
StringBuilder outputText = new StringBuilder();
foreach (StorageFolder folder in folderList)
{
IReadOnlyList<StorageFile> fileList = await folder.GetFilesAsync();
// Print the month and number of files in this group.
outputText.AppendLine(folder.Name + " (" + fileList.Count + ")");
foreach (StorageFile file in fileList)
{
// Print the name of the file.
outputText.AppendLine(" " + file.Name);
}
}
// MainPage.h
// In MainPage.xaml: <TextBlock x:Name="OutputTextBlock"/>
#include <winrt/Windows.Storage.h>
#include <winrt/Windows.Storage.Search.h>
#include <sstream>
...
Windows::Foundation::IAsyncAction ExampleCoroutineAsync()
{
// Be sure to specify the Pictures Folder capability in your Package.appxmanifest.
Windows::Storage::StorageFolder picturesFolder{
Windows::Storage::KnownFolders::PicturesLibrary()
};
Windows::Storage::Search::StorageFolderQueryResult queryResult{
picturesFolder.CreateFolderQuery(Windows::Storage::Search::CommonFolderQuery::GroupByMonth)
};
std::wstringstream outputString;
for (Windows::Storage::StorageFolder const& folder : co_await queryResult.GetFoldersAsync())
{
auto files{ co_await folder.GetFilesAsync() };
outputString << folder.Name().c_str() << L" (" << files.Size() << L")" << std::endl;
for (Windows::Storage::StorageFile const& file : files)
{
outputString << L" " << file.Name().c_str() << std::endl;
}
}
OutputTextBlock().Text(outputString.str().c_str());
}
예제의 출력은 다음과 유사합니다.
July 2015 (2)
MyImage3.png
MyImage4.png
December 2014 (2)
MyImage1.png
MyImage2.png
Windows developer