Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Fájlokat és mappákat érhet el mappában, tárban, eszközön vagy hálózati helyen. Fájl- és mappa-lekérdezések létrehozásával is lekérdezheti a fájlokat és mappákat egy helyen.
A WinUI-alkalmazás adatainak tárolásával kapcsolatos útmutatásért tekintse meg az ApplicationData osztályt.
Megjegyzés:
A teljes mintát a Mappa számbavételi mintájában találja.
Előfeltételek
A WinUI-alkalmazások aszinkron programozásának ismertetése
Megtudhatja, hogyan írhat aszinkron alkalmazásokat C#-ban, lásd: Aszinkron API-k meghívása C# vagy Visual Basic nyelven. Az aszinkron alkalmazások C++/WinRT nyelven történő írásáról a C++/WinRT egyidejűségi és aszinkron műveletek c++/WinRT használatával című témakörben olvashat.
hozzáférési engedélyek a helyhez
Az ezekben a példákban szereplő kódhoz például a picturesLibrary képesség szükséges, de előfordulhat, hogy a tartózkodási hely más képességet igényel, vagy egyáltalán nem rendelkezik képességgel. További információ: Fájlhozzáférés engedélyei.
Fájlok és mappák számbavétele egy helyen
Megjegyzés:
Ne feledje deklarálni a picturesLibrary képességet.
Ebben a példában először a StorageFolder.GetFilesAsync metódust használjuk az KnownFolders.PicturesLibrary gyökérmappájában található összes fájl lekéréséhez (nem almappákban), és felsoroljuk az egyes fájlok nevét. Ezután a StorageFolder.GetFoldersAsync metódussal lekérjük a PicturesLibrary összes almappáját, és felsoroljuk az egyes almappák nevét.
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());
}
Megjegyzés:
A C#-ban ne felejtse el elhelyezni az aszinkron kulcsszót bármely metódus metódusdeklarációjában, amelyben a várakozási operátort használja.
Másik lehetőségként a StorageFolder.GetItemsAsync metódussal lekérheti az összes elemet (fájlokat és almappákat is) egy adott helyen. Az alábbi példa a GetItemsAsync metódust használja a KnownFolders.PicturesLibrary gyökérmappájának összes fájljának és almappájának lekéréséhez (nem almappákban). Ezután a példa felsorolja az egyes fájlok és almappák nevét. Ha az elem egy almappa, a példa hozzáfűzi "folder" az névhez.
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());
}
}
Fájlok lekérdezése egy helyen, és az egyező fájlok számbavétele
Ebben a példában lekérdezzük az összes fájlt a KnownFolders.PicturesLibrary könyvtárban havi csoportosítással, és ezúttal a példa bejárja az almappákat. Először meghívjuk a StorageFolder.CreateFolderQuery nevet, és átadjuk a CommonFolderQuery.GroupByMonth értéket a metódusnak. Ez egy StorageFolderQueryResult objektumot ad nekünk.
Ezután meghívjuk a StorageFolderQueryResult.GetFoldersAsync parancsot , amely a virtuális mappákat képviselő StorageFolder-objektumokat adja vissza. Ebben az esetben hónap szerint csoportosítunk, így az egyes virtuális mappák egy adott hónapra vonatkozó fájlcsoportot jelölnek.
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());
}
A példa kimenete az alábbihoz hasonlóan néz ki.
July 2015 (2)
MyImage3.png
MyImage4.png
December 2014 (2)
MyImage1.png
MyImage2.png
Windows developer