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.
Le app WinUI possono accedere a file e cartelle usando api Windows Runtime (WinRT) per operazioni di file comuni. Questo articolo illustra come accedere a file e cartelle, eseguire query sulle librerie di sistema, recuperare le proprietà dei file e usare percorsi come Immagini e documenti.
Quando crei app WinUI in pacchetto, puoi usare le API WinRT per accedere a file e cartelle in posizioni specifiche. Queste API consentono di leggere e scrivere impostazioni dell'app, aprire i selettore di file e cartelle e usare posizioni in modalità sandbox come le librerie Video e Musica. È anche possibile combinare API WinRT con API Win32 da Windows SDK e API di .NET SDK.
Questo articolo è incentrato sulle API di archiviazione WinRT e illustra come:
- Eseguire query su file e cartelle nelle librerie di sistema
- Recuperare proprietà di file di base, ad esempio dimensioni e data di modifica
- Monitorare le modifiche apportate alla raccolta immagini
Interrogare file e cartelle
Nell'esempio seguente viene illustrato come usare le API StorageFolder e StorageFile per eseguire query nella libreria Documenti per i file e le cartelle. Nell'esempio viene utilizzato 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}");
}
}
}
Ottieni le proprietà di base dei file
L'esempio seguente accetta il metodo GetFilesInFolderAsync dell'esempio precedente e aggiunge la possibilità di recuperare le dimensioni e la data del file modificate per ogni file. L'esempio usa l'API
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}");
}
}
}
Lavorare con la raccolta immagini
In questo esempio l'app è configurata per ricevere notifiche quando la libreria Immagini viene aggiornata. Nell'esempio viene usata l'API di 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 utilizzata la proprietà
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.");
}
}