Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Las aplicaciones WinUI pueden acceder a archivos y carpetas mediante las API de Windows Runtime (WinRT) para operaciones comunes con archivos. En este artículo se muestra cómo access archivos y carpetas, consultar bibliotecas del sistema, recuperar propiedades de archivo y trabajar con ubicaciones como Imágenes y documentos.
Al compilar aplicaciones WinUI empaquetadas, puede usar APIs de WinRT para acceder a archivos y carpetas en ubicaciones específicas. Estas API le permiten leer y escribir la configuración de la aplicación, abrir selectores de archivos y carpetas y trabajar con ubicaciones de espacio aislado, como las bibliotecas de vídeo y música. También puede combinar las API de WinRT con las API de Win32 desde el Windows SDK y las API desde el SDK de .NET.
Este artículo se centra en las API de WinRT storage y muestra cómo:
- Consulta de archivos y carpetas en bibliotecas del sistema
- Recuperar propiedades básicas del archivo, como el tamaño y la fecha de modificación
- Monitorear los cambios en la biblioteca de imágenes
Consulta de archivos y carpetas
En el ejemplo siguiente se muestra cómo usar las API StorageFolder y StorageFile para consultar la biblioteca Documents para archivos y carpetas. En el ejemplo se usa el método GetFilesInFolderAsync para recorrer en iteración recursiva la estructura de carpetas y anexar los nombres de archivo a un objeto 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}");
}
}
}
Obtención de las propiedades básicas del archivo
En el ejemplo siguiente se toma el método GetFilesInFolderAsync del ejemplo anterior y se agrega la capacidad de recuperar el tamaño y la fecha de archivo modificados para cada archivo. En el ejemplo se usa la API BasicProperties para recuperar el tamaño del archivo y la fecha de modificación de cada archivo, formatea el tamaño y la fecha modificada, y añade el tamaño y la fecha de modificación al objeto StringBuilder después de cada nombre de archivo y de carpeta.
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}");
}
}
}
Trabajar con la biblioteca de imágenes
En este ejemplo, la aplicación está configurada para recibir notificaciones cuando la biblioteca Imágenes de se actualiza. En el ejemplo se usa la API StorageLibrary para recuperar el evento Pictures y la biblioteca DefinitionChanged para recibir notificaciones cuando se actualiza la biblioteca. El evento DefinitionChanged se invoca cuando cambia la lista de carpetas de la biblioteca actual. En el ejemplo se usa la propiedad Folders de la biblioteca para recorrer en iteración las carpetas de la biblioteca Imágenes y escribe el nombre de carpeta en la consola.
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.");
}
}
Consulte también
Accede a los archivos y las carpetas con Windows App SDK y las API de .NET