Abrir archivos y carpetas con un selector
API importantes
Para obtener acceso a archivos y carpetas, permite al usuario interactuar con un selector. Puedes usar las clases FileOpenPicker y FileSavePicker para acceder a archivos y la clase FolderPicker para acceder a una carpeta.
Nota
Para obtener un ejemplo completo, consulta File picker sample (ejemplo de selector de archivos).
Nota:
En una aplicación de escritorio (que incluye aplicaciones WinUI 3), puedes usar selectores de archivos y carpetas de Windows.Storage.Pickers. Sin embargo, si la aplicación de escritorio requiere elevación para ejecutarse, necesitará un enfoque diferente porque estas API no están diseñadas para utilizarse en una aplicación elevada. A modo de ejemplo, vea FileSavePicker.
Requisitos previos
Comprender la programación asincrónica de las aplicaciones para Plataforma universal de Windows (UWP)
Puedes aprender a escribir aplicaciones asincrónicas en C# o Visual Basic. Consulta Llamar a API asincrónicas en C# o Visual Basic. Para aprender a escribir aplicaciones asincrónicas en C++, consulta Programación asincrónica en C++.
Permisos de acceso a la ubicación
Consulta Permisos de acceso de archivos.
Interfaz de usuario del selector de archivos
Un selector de archivos muestra información para guiar a los usuarios y proporcionar una experiencia coherente cuando estos abren o guardan archivos.
Esta información incluye:
- La ubicación actual
- El elemento o los elementos que el usuario ha seleccionado
- Un árbol de ubicaciones que el usuario puede examinar. Estas ubicaciones son ubicaciones del sistema de archivos (como las carpetas Música o Descargas), así como aplicaciones que implementan el contrato del selector de archivos (como Cámara, Fotos y Microsoft OneDrive).
Es probable que una aplicación de correo muestre un selector de archivos para que el usuario pueda seleccionar archivos adjuntos.
Funcionamiento de los selectores
Con un selector, la aplicación puede acceder a archivos y carpetas, examinarlos y guardarlos en cualquier parte del sistema del usuario. La aplicación recibe estas selecciones como objetos StorageFile y StorageFolder, sobre los que luego puedes actuar.
El selector usa una interfaz única y unificada para que el usuario pueda seleccionar archivos y carpetas del sistema de archivos o de otras aplicaciones. Los archivos seleccionados desde otras aplicaciones son como archivos del sistema de archivos: se devuelven como objetos StorageFile. En general, la aplicación puede actuar sobre ellos de la misma manera que otros objetos similares. Otras aplicaciones hacen que los archivos estén disponibles mediante su participación en los contratos del selector de archivos. Si quieres que tu aplicación proporcione archivos, una ubicación para guardar o actualizaciones de archivos a otras aplicaciones, consulta Integrar con contratos del selector de archivos.
Por ejemplo, podrías llamar al selector de archivos en la aplicación para que el usuario pueda abrir un archivo. Esto hace que la aplicación llame a la aplicación. El selector de archivos interactúa con el sistema o con otras aplicaciones para permitir que el usuario navegue y seleccione el archivo. Cuando el usuario elige un archivo, el selector de archivos devuelve ese archivo a la aplicación. A continuación se muestra este proceso para el caso en el que el usuario elige un archivo de una aplicación proveedora, como OneDrive.
Seleccionar un solo archivo: lista completa de códigos
var picker = new Windows.Storage.Pickers.FileOpenPicker();
picker.ViewMode = Windows.Storage.Pickers.PickerViewMode.Thumbnail;
picker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.PicturesLibrary;
picker.FileTypeFilter.Add(".jpg");
picker.FileTypeFilter.Add(".jpeg");
picker.FileTypeFilter.Add(".png");
Windows.Storage.StorageFile file = await picker.PickSingleFileAsync();
if (file != null)
{
// Application now has read/write access to the picked file
this.textBlock.Text = "Picked photo: " + file.Name;
}
else
{
this.textBlock.Text = "Operation cancelled.";
}
Seleccionar un solo archivo: paso a paso
El uso del selector de archivos requiere la creación y la personalización de un objeto de selector de archivos y, luego, la visualización del selector de archivos para que el usuario pueda seleccionar uno o varios elementos.
Crear y personalizar un FileOpenPicker
var picker = new Windows.Storage.Pickers.FileOpenPicker(); picker.ViewMode = Windows.Storage.Pickers.PickerViewMode.Thumbnail; picker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.PicturesLibrary; picker.FileTypeFilter.Add(".jpg"); picker.FileTypeFilter.Add(".jpeg"); picker.FileTypeFilter.Add(".png");
Establece las propiedades en el objeto de selector de archivos que sean relevantes para los usuarios y la aplicación.
En este ejemplo, se crea una representación visual enriquecida en una práctica ubicación que el usuario puede seleccionar estableciendo tres propiedades: ViewMode, SuggestedStartLocation y FileTypeFilter.
Al establecer la propiedad ViewMode en el valor de enumeración Thumbnail de PickerViewMode, se crea una representación visual enriquecida con miniaturas de imágenes para representar archivos en el selector de archivos. Haz esto para seleccionar archivos visuales, como imágenes o vídeos. De lo contrario, usa PickerViewMode.List. Una aplicación hipotética de correo electrónico con las características Adjuntar imagen o vídeo y Adjuntar documento establecería el ViewMode adecuado para la característica antes de mostrar el selector de archivos.
Establecer SuggestedStartLocation en Imágenes mediante PickerLocationId.PicturesLibrary permite al usuario iniciar en una ubicación donde probablemente pueda encontrar imágenes. Establece SuggestedStartLocation en una ubicación adecuada para el tipo de archivo que se está seleccionando, por ejemplo, música, imágenes, vídeos o documentos. Desde la ubicación de inicio, el usuario puede dirigirse a otras ubicaciones.
El uso de FileTypeFilter para especificar los tipos de archivo mantiene al usuario concentrado en la selección de los archivos relevantes. Para reemplazar los tipos de archivo anteriores de la propiedad FileTypeFilter con entradas nuevas, usa ReplaceAll en lugar de Add.
Mostrar FileOpenPicker
Para seleccionar un único archivo
Windows.Storage.StorageFile file = await picker.PickSingleFileAsync(); if (file != null) { // Application now has read/write access to the picked file this.textBlock.Text = "Picked photo: " + file.Name; } else { this.textBlock.Text = "Operation cancelled."; }
Para seleccionar varios archivos
var files = await picker.PickMultipleFilesAsync(); if (files.Count > 0) { StringBuilder output = new StringBuilder("Picked files:\n"); // Application now has read/write access to the picked file(s) foreach (Windows.Storage.StorageFile file in files) { output.Append(file.Name + "\n"); } this.textBlock.Text = output.ToString(); } else { this.textBlock.Text = "Operation cancelled."; }
Seleccionar una carpeta: lista completa de códigos
var folderPicker = new Windows.Storage.Pickers.FolderPicker();
folderPicker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.Desktop;
folderPicker.FileTypeFilter.Add("*");
Windows.Storage.StorageFolder folder = await folderPicker.PickSingleFolderAsync();
if (folder != null)
{
// Application now has read/write access to all contents in the picked folder
// (including other sub-folder contents)
Windows.Storage.AccessCache.StorageApplicationPermissions.
FutureAccessList.AddOrReplace("PickedFolderToken", folder);
this.textBlock.Text = "Picked folder: " + folder.Name;
}
else
{
this.textBlock.Text = "Operation cancelled.";
}
Sugerencia
Cuando la aplicación obtenga acceso a un archivo o a una carpeta a través de un selector, agrégalo a la propiedad FutureAccessList o a la propiedad MostRecentlyUsedList de la aplicación para tenerlo controlado en el futuro. Obtendrás más información sobre cómo usar estas listas en el tema Cómo hacer un seguimiento de los archivos y carpetas usados recientemente.