Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Accedere a file e cartelle in una cartella, una raccolta, un dispositivo o un percorso di rete. È anche possibile eseguire query su file e cartelle in un percorso utilizzando query personalizzate.
Per indicazioni su come archiviare i dati dell'app WinUI, vedi la classe ApplicationData .
Annotazioni
Per un esempio completo, vedere l'esempio di enumerazione Folder.
Prerequisiti
Informazioni sulla programmazione asincrona per le app WinUI
Per informazioni su come scrivere app asincrone in C#, vedere Chiamare API asincrone in C# o Visual Basic. Per informazioni su come scrivere app asincrone in C++/WinRT, vedere Concorrenza e operazioni asincrone con C++/WinRT.
Autorizzazioni di accesso alla posizione
Ad esempio, il codice in questi esempi richiede la funzionalità picturesLibrary, ma la posizione potrebbe richiedere una funzionalità diversa o nessuna funzionalità. Per altre informazioni, vedere Autorizzazioni di accesso ai file.
Enumerare file e cartelle in una posizione
Annotazioni
Ricordarsi di dichiarare la funzionalità picturesLibrary.
In questo esempio si usa innanzitutto il metodo StorageFolder.GetFilesAsync per ottenere tutti i file nella cartella radice di KnownFolders.PicturesLibrary (non nelle sottocartelle) ed elencare il nome di ogni file. Successivamente, si usa il metodo StorageFolder.GetFoldersAsync per ottenere tutte le sottocartelle in PicturesLibrary ed elencare il nome di ogni sottocartella.
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());
}
Annotazioni
In C#, ricordarsi di inserire la parola chiave asincrona nella dichiarazione del metodo di qualsiasi metodo in cui si usa l'operatore await.
In alternativa, è possibile usare il metodo StorageFolder.GetItemsAsync per ottenere tutti gli elementi (file e sottocartelle) in una determinata posizione. Nell'esempio seguente viene utilizzato il metodo GetItemsAsync per ottenere tutti i file e le sottocartelle nella cartella radice di KnownFolders.PicturesLibrary (non nelle sottocartelle). Nell'esempio viene quindi elencato il nome di ogni file e sottocartella. Se l'elemento è una sottocartella, l'esempio aggiunge "folder" al nome.
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());
}
}
Interrogare i file in un percorso e elencare i file corrispondenti
In questo esempio viene eseguita una query per tutti i file presenti in KnownFolders.PicturesLibrary raggruppati per mese e questa volta l'esempio si ripete in sottocartelle. Prima di tutto, chiamiamo StorageFolder.CreateFolderQuery e passiamo il valore CommonFolderQuery.GroupByMonth al metodo . In questo modo viene visualizzato un oggetto StorageFolderQueryResult .
Successivamente chiamiamo StorageFolderQueryResult.GetFoldersAsync che restituisce gli oggetti StorageFolder che rappresentano le cartelle virtuali. In questo caso si sta raggruppando per mese, quindi le cartelle virtuali rappresentano un gruppo di file con lo stesso mese.
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());
}
L'output dell'esempio è simile al seguente.
July 2015 (2)
MyImage3.png
MyImage4.png
December 2014 (2)
MyImage1.png
MyImage2.png