FileSavePicker Clase

Definición

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
Object Platform::Object IInspectable FileSavePicker
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)

Se aplica a

Consulte también