Accedere a file e cartelle con Windows App SDK e API WinRT
Le app di Windows App SDK in pacchetto possono sfruttare le API WinRT per la lettura e la scrittura di impostazioni dell'app, la selezione file e cartelle e posizioni speciali sandbox, ad esempio la libreria Video/Musica. Qualsiasi app desktop in pacchetto può inoltre usare le API WinRT e Win32 in Windows SDK, nonché le API fornite in .NET SDK. Questo articolo fornisce indicazioni su come usare le API di archiviazione WinRT per eseguire query su file e cartelle, recuperare le proprietà dei file e usare la libreria Immagini.
Eseguire query su file e cartelle
Nell'esempio seguente viene illustrato come usare le API StorageFolder e StorageFile per eseguire query sulla raccolta Documenti per i file e le cartelle. Nell'esempio viene usato il metodo GetFilesInFolderAsync
per scorrere in modo ricorsivo la struttura di cartelle e accodare i nomi di file a un oggetto StringBuilder
.
using System.Text;
using Windows.Storage;
...
private async Task<string> GetDocumentsContentsAsync()
{
StorageFolder docsFolder = KnownFolders.DocumentsLibrary;
StringBuilder outputBuilder = new();
await GetFilesInFolderAsync(docsFolder, outputBuilder);
return outputBuilder.ToString();
}
private async Task GetFilesInFolderAsync(StorageFolder folder, StringBuilder outputBuilder)
{
IReadOnlyList<IStorageItem> storageItem = await folder.GetItemsAsync();
foreach (var item in storageItem)
{
if (item is StorageFolder)
{
await GetFilesInFolderAsync(item as StorageFolder, outputBuilder);
}
else
{
outputBuilder.AppendLine($"Found {item.Name} in folder {folder.Name}");
}
}
}
Ottenere le proprietà dei file di base
L'esempio seguente usa il metodo GetFilesInFolderAsync
dell'esempio precedente e aggiunge la possibilità di recuperare le dimensioni e la data di modifica per ogni file. L'esempio usa l'API BasicProperties per recuperare le dimensioni e la data di modifica per ogni file, formatta le dimensioni del file e aggiunge le dimensioni e la data di modifica all'oggetto StringBuilder
dopo ogni nome di file e cartella.
using System.Text;
using Windows.Storage;
using Windows.Storage.FileProperties;
...
private async Task GetFilesInFolderAsync(StorageFolder folder, StringBuilder outputBuilder)
{
IReadOnlyList<IStorageItem> storageItem = await folder.GetItemsAsync();
foreach (var item in storageItem)
{
if (item is StorageFolder)
{
await GetFilesInFolderAsync(item as StorageFolder, outputBuilder);
}
else
{
outputBuilder.AppendLine($"Found {item.Name} in folder {folder.Name}");
// Append each file's size and date modified.
BasicProperties basicProperties = await item.GetBasicPropertiesAsync();
string fileSize = string.Format("{0:n0}", basicProperties.Size);
outputBuilder.AppendLine($" - File size: {fileSize} bytes");
outputBuilder.AppendLine($" - Date modified: {basicProperties.DateModified}");
}
}
}
Uso della raccolta Immagini
In questo esempio l'app è configurata per ricevere notifiche quando la raccolta Immagini viene aggiornata. L'esempio usa l'API StorageLibrary per recuperare la libreria Immagini e l'evento DefinitionChanged per ricevere notifiche quando la libreria viene aggiornata. L'evento DefinitionChanged
viene richiamato quando cambia l'elenco di cartelle nella libreria corrente. Nell'esempio viene usata la proprietà Folders
della libreria per eseguire l'iterazione delle cartelle nella raccolta Immagini e scrivere il nome della cartella nella console.
using Windows.Storage;
...
private async Task Configure()
{
StorageLibrary picturesFolder = await StorageLibrary.GetLibraryAsync(KnownLibraryId.Pictures);
picturesFolder.DefinitionChanged += picturesFolder_DefinitionChanged;
}
private void picturesFolder_DefinitionChanged(StorageLibrary sender, object args)
{
foreach (StorageFolder item in sender.Folders)
{
Console.WriteLine($"Folder {item.Name} found.");
}
}