Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Přistupujte k souborům a složkám ve složce, knihovně, zařízení nebo síťovém umístění. Soubory a složky v umístění můžete také dotazovat tak, že vytvoříte dotazy na soubory a složky.
Pokyny k ukládání dat aplikace WinUI najdete v třídě ApplicationData .
Poznámka:
Kompletní ukázku najdete v ukázce výčtu složek.
Předpoklady
Principy asynchronního programování pro aplikace WinUI
Dozvíte se, jak psát asynchronní aplikace v jazyce C#, viz Volání asynchronních rozhraní API v jazyce C# nebo Visual Basic. Informace o tom, jak psát asynchronní aplikace v C++/WinRT, najdete v tématu Souběžnost a asynchronní operace s C++/WinRT.
Přístupová oprávnění k umístění
Například kód v těchto příkladech vyžaduje funkci PicturesLibrary, ale vaše umístění může vyžadovat jinou funkci nebo vůbec žádnou funkci. Další informace najdete v tématu Přístupová oprávnění k souborům.
Vyjmenovat soubory a složky v umístění
Poznámka:
Nezapomeňte deklarovat funkci PicturesLibrary.
V tomto příkladu nejprve použijeme metodu StorageFolder.GetFilesAsync k získání všech souborů v kořenové složce PoleFolders.PicturesLibrary (ne v podsložkách) a zobrazíme název každého souboru. Dále pomocí metody StorageFolder.GetFoldersAsync získáme všechny podsložky v knihovně PicturesLibrary a vypíšeme název každé podsložky.
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());
}
Poznámka:
V jazyce C# nezapomeňte vložit asynchronní klíčové slovo do deklarace metody jakékoli metody, ve které použijete operátor await.
Alternativně můžete pomocí metody StorageFolder.GetItemsAsync získat všechny položky (soubory i podsložky) v určitém umístění. Následující příklad používá metodu GetItemsAsync k získání všech souborů a podsložek v kořenové složce KnownFolders.PicturesLibrary (ne v podsložkách). V příkladu je uveden název každého souboru a podsložky. Pokud je položka podsložkou, příklad připojí "folder" k názvu.
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());
}
}
Vyhledávání souborů v umístění a vyjmenování odpovídajících souborů
V tomto příkladu se dotazujeme na všechny soubory v souboru KnownFolders.PicturesLibrary seskupené podle měsíce a tentokrát se příklad opakuje do podsložek. Nejprve zavoláme StorageFolder.CreateFolderQuery a předáme do metody hodnotu CommonFolderQuery.GroupByMonth. To nám dává StorageFolderQueryResult objekt.
Dále nazýváme StorageFolderQueryResult.GetFoldersAsync , která vrací objekty StorageFolder představující virtuální složky. V tomto případě seskupujeme podle měsíců, takže všechny virtuální složky představují skupinu souborů se stejným měsícem.
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());
}
Výstup příkladu vypadá podobně jako v následujícím příkladu.
July 2015 (2)
MyImage3.png
MyImage4.png
December 2014 (2)
MyImage1.png
MyImage2.png
Windows developer