FileSavePicker Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Representa un selector de archivos que permite al usuario elegir el nombre de archivo, la extensión y la ubicación de almacenamiento de un archivo.
En una aplicación de escritorio, antes de usar una instancia de esta clase de una manera que muestre la interfaz de usuario, deberá asociar el objeto con el identificador de ventana de su propietario. Para obtener más información y ejemplos de código, consulta Mostrar objetos de interfaz de usuario de WinRT que dependen de CoreWindow.
public ref class FileSavePicker sealed
/// [Windows.Foundation.Metadata.Activatable(65536, Windows.Foundation.UniversalApiContract)]
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
class FileSavePicker final
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.Activatable(65536, "Windows.Foundation.UniversalApiContract")]
class FileSavePicker final
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.Activatable(65536, "Windows.Foundation.UniversalApiContract")]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class FileSavePicker final
[Windows.Foundation.Metadata.Activatable(65536, typeof(Windows.Foundation.UniversalApiContract))]
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
public sealed class FileSavePicker
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.Activatable(65536, "Windows.Foundation.UniversalApiContract")]
public sealed class FileSavePicker
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.Activatable(65536, "Windows.Foundation.UniversalApiContract")]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class FileSavePicker
function FileSavePicker()
Public NotInheritable Class FileSavePicker
- Herencia
- Atributos
Requisitos de Windows
Familia de dispositivos |
Windows 10 (se introdujo en la versión 10.0.10240.0)
|
API contract |
Windows.Foundation.UniversalApiContract (se introdujo en la versión v1.0)
|
Ejemplos
El ejemplo del selector de archivos está disponible en las versiones de C# y C++/WinRT. Muestra cómo comprobar si la aplicación está acoplada, cómo establecer las propiedades del selector de archivos y cómo mostrar un selector de archivos para que el usuario pueda guardar un archivo.
Este es un extracto de la versión de C# de la aplicación de ejemplo.
if (rootPage.EnsureUnsnapped())
{
FileSavePicker savePicker = new FileSavePicker();
savePicker.SuggestedStartLocation = PickerLocationId.DocumentsLibrary;
// Dropdown of file types the user can save the file as
savePicker.FileTypeChoices.Add("Plain Text", new List<string>() { ".txt" });
// Default file name if the user does not type one in or select a file to replace
savePicker.SuggestedFileName = "New Document";
StorageFile file = await savePicker.PickSaveFileAsync();
if (file != null)
{
// Prevent updates to the remote version of the file until we finish making changes and call CompleteUpdatesAsync.
CachedFileManager.DeferUpdates(file);
// write to file
await FileIO.WriteTextAsync(file, file.Name);
// Let Windows know that we're finished changing the file so the other app can update the remote version of the file.
// Completing updates may require Windows to ask for user input.
FileUpdateStatus status = await CachedFileManager.CompleteUpdatesAsync(file);
if (status == FileUpdateStatus.Complete)
{
OutputTextBlock.Text = "File " + file.Name + " was saved.";
}
else
{
OutputTextBlock.Text = "File " + file.Name + " couldn't be saved.";
}
}
else
{
OutputTextBlock.Text = "Operation cancelled.";
}
}
Comentarios
Importante
Debe usar la propiedad FileTypeChoices para especificar uno o varios tipos de archivo antes de llamar al método PickSaveFileAsync o el selector producirá una excepción.
Para obtener información sobre cómo guardar archivos a través del selector de archivos, consulte Cómo guardar archivos a través de selectores de archivos.
Para empezar a acceder a archivos y carpetas selector de archivos, vea Archivos, carpetas y bibliotecas .
Advertencia
Si intentas mostrar el selector de archivos mientras se ajusta la aplicación, no se mostrará el selector de archivos y se producirá una excepción. Puedes evitarlo asegurándote de que la aplicación no está acoplada o desasignándola antes de llamar al selector de archivos. Los ejemplos de código siguientes y el ejemplo del selector de archivos muestran cómo hacerlo.
En una aplicación de escritorio que requiere elevación
En una aplicación de escritorio (que incluye aplicaciones winUI 3), puedes usar FileSavePicker (y otros tipos de Windows.Storage.Pickers). Pero si la aplicación de escritorio requiere elevación para ejecutarse, necesitará un enfoque diferente (es decir, porque estas API no están diseñadas para usarse en una aplicación con privilegios elevados). El fragmento de código siguiente muestra cómo puedes usar el generador de código fuente de C#/Win32 P/Invoke (CsWin32) para llamar a las API de selección de Win32 en su lugar. Para obtener información sobre cómo usar CsWin32, siga ese vínculo para la documentación.
// NativeMethods.txt
CoCreateInstance
FileSaveDialog
IFileSaveDialog
SHCreateItemFromParsingName
// MainWindow.xaml
...
<TextBlock x:Name="OutputTextBlock"/>
...
// MainWindow.xaml.cs
using Microsoft.UI.Xaml;
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using Windows.Win32;
using Windows.Win32.Foundation;
using Windows.Win32.System.Com;
using Windows.Win32.UI.Shell;
using Windows.Win32.UI.Shell.Common;
namespace FileSavePickerExample
{
public sealed partial class MainWindow : Window
{
public MainWindow()
{
this.InitializeComponent();
}
private unsafe void myButton_Click(object sender, RoutedEventArgs e)
{
try
{
// Retrieve the window handle (HWND) of the main WinUI 3 window.
var hWnd = WinRT.Interop.WindowNative.GetWindowHandle(this);
int hr = PInvoke.CoCreateInstance<IFileSaveDialog>(
typeof(FileSaveDialog).GUID,
null,
CLSCTX.CLSCTX_INPROC_SERVER,
out var fsd);
if (hr < 0)
{
Marshal.ThrowExceptionForHR(hr);
}
// Set file type filters.
string filter = "Word Documents|*.docx|JPEG Files|*.jpg";
List<COMDLG_FILTERSPEC> extensions = new List<COMDLG_FILTERSPEC>();
if (!string.IsNullOrEmpty(filter))
{
string[] tokens = filter.Split('|');
if (0 == tokens.Length % 2)
{
// All even numbered tokens should be labels.
// Odd numbered tokens are the associated extensions.
for (int i = 1; i < tokens.Length; i += 2)
{
COMDLG_FILTERSPEC extension;
extension.pszSpec = (char*)Marshal.StringToHGlobalUni(tokens[i]);
extension.pszName = (char*)Marshal.StringToHGlobalUni(tokens[i - 1]);
extensions.Add(extension);
}
}
}
fsd.SetFileTypes(extensions.ToArray());
// Set the default folder.
hr = PInvoke.SHCreateItemFromParsingName(
Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments),
null,
typeof(IShellItem).GUID,
out var directoryShellItem);
if (hr < 0)
{
Marshal.ThrowExceptionForHR(hr);
}
fsd.SetFolder((IShellItem)directoryShellItem);
fsd.SetDefaultFolder((IShellItem)directoryShellItem);
// Set the default file name.
fsd.SetFileName($"{DateTime.Now:yyyyMMddHHmm}");
// Set the default extension.
fsd.SetDefaultExtension(".docx");
fsd.Show(new HWND(hWnd));
fsd.GetResult(out var ppsi);
PWSTR filename;
ppsi.GetDisplayName(SIGDN.SIGDN_FILESYSPATH, &filename);
OutputTextBlock.Text = filename.ToString();
}
catch (Exception ex)
{
OutputTextBlock.Text = "a problem occured: " + ex.Message;
}
}
}
}
Historial de versiones
Versión de Windows | Versión del SDK | Valor agregado |
---|---|---|
1903 | 18362 | CreateForUser |
1903 | 18362 | Usuario |
Constructores
FileSavePicker() |
Crea una nueva instancia de fileSavePicker. En una aplicación de escritorio, antes de usar una instancia de esta clase de una manera que muestre la interfaz de usuario, deberá asociar el objeto con el identificador de ventana de su propietario. Para obtener más información y ejemplos de código, consulta Mostrar objetos de interfaz de usuario de WinRT que dependen de CoreWindow. |
Propiedades
CommitButtonText |
Obtiene o establece el texto de la etiqueta del botón confirmar en la interfaz de usuario del selector de archivos. |
ContinuationData |
Obtiene un conjunto de valores que va a rellenar la aplicación antes de una operación PickSaveFileAndContinue que desactiva la aplicación para proporcionar contexto cuando se activa la aplicación. (Windows Phone aplicación 8.x) |
DefaultFileExtension |
Importante No utilice esta propiedad. Use la propiedad FileTypeChoices en su lugar. La extensión de archivo predeterminada se establece mediante el primer tipo de archivo del primer grupo de tipos de archivo en FileTypeChoices. Obtiene o establece la extensión de nombre de archivo predeterminada que el fileSavePicker proporciona a los archivos que se van a guardar. |
EnterpriseId |
Obtiene o establece un identificador que especifica la empresa propietaria del archivo. |
FileTypeChoices |
Obtiene la colección de tipos de archivo válidos que el usuario puede elegir asignar a un archivo. |
SettingsIdentifier |
Obtiene o establece el identificador de configuración asociado a la instancia actual de FileSavePicker . |
SuggestedFileName |
Obtiene o establece el nombre de archivo que el selector de guardado de archivos sugiere al usuario. |
SuggestedSaveFile |
Obtiene o establece el storageFile que el selector de archivos sugiere al usuario para guardar un archivo. |
SuggestedStartLocation |
Obtiene o establece la ubicación que el selector de guardado de archivos sugiere al usuario como ubicación para guardar un archivo. |
User |
Obtiene información sobre el usuario para el que se creó FileSavePicker . Use esta propiedad para aplicaciones multiusuario. |
Métodos
CreateForUser(User) |
Crea un fileSavePicker cuyo ámbito es el directorio personal del usuario especificado. Use este método para aplicaciones multiusuario. |
PickSaveFileAndContinue() |
Obsoleto a partir de Windows 10; use PickSaveFileAsync en su lugar. Muestra el selector de archivos para que el usuario pueda guardar un archivo, desactivarlo y la aplicación y volver a activarlo cuando se complete la operación. (Windows Phone aplicación 8.x) |
PickSaveFileAsync() |
Muestra el selector de archivos para que el usuario pueda guardar un archivo y establecer el nombre de archivo, la extensión y la ubicación del archivo que se va a guardar. (Aplicación para UWP) |