Partager via


FileSavePicker Classe

Définition

Représente un sélecteur de fichiers qui permet à l’utilisateur de choisir le nom, l’extension et l’emplacement de stockage d’un fichier.

Dans une application de bureau, avant d’utiliser une instance de cette classe d’une manière qui affiche l’interface utilisateur, vous devez associer l’objet au handle de fenêtre de son propriétaire. Pour plus d’informations et des exemples de code, consultez Afficher des objets d’interface utilisateur WinRT qui dépendent 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
Héritage
Object Platform::Object IInspectable FileSavePicker
Attributs

Configuration requise pour Windows

Famille d’appareils
Windows 10 (introduit dans 10.0.10240.0)
API contract
Windows.Foundation.UniversalApiContract (introduit dans v1.0)

Exemples

L’exemple de sélecteur de fichiers est disponible dans les versions C# et C++/WinRT. Il montre comment vérifier si l’application est alignée, comment définir les propriétés du sélecteur de fichiers et comment afficher un sélecteur de fichiers afin que l’utilisateur puisse enregistrer un fichier.

Voici un extrait de la version C# de l’exemple d’application.

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.";
    }
}

Remarques

Important

Vous devez utiliser la propriété FileTypeChoices pour spécifier un ou plusieurs types de fichiers avant d’appeler la méthode PickSaveFileAsync, sinon le sélecteur lève une exception.

Pour savoir comment enregistrer des fichiers via le sélecteur de fichiers, consultez Comment enregistrer des fichiers via des sélecteurs de fichiers.

Pour commencer à accéder aux fichiers et au sélecteur de fichiers de dossiers, consultez Fichiers, dossiers et bibliothèques .

Avertissement

Si vous essayez d’afficher le sélecteur de fichiers pendant que votre application est alignée, le sélecteur de fichiers ne s’affiche pas et une exception est levée. Vous pouvez éviter cela en vous assurant que votre application n’est pas ancrée ou en la désenlevant avant d’appeler le sélecteur de fichiers. Les exemples de code suivants et l’exemple de sélecteur de fichiers vous montrent comment procéder.

Dans une application de bureau qui nécessite une élévation

Dans une application de bureau (qui inclut les applications WinUI 3), vous pouvez utiliser FileSavePicker (et d’autres types à partir de Windows.Storage.Pickers). Mais si l’application de bureau nécessite une élévation pour s’exécuter, vous aurez besoin d’une autre approche (c’est parce que ces API ne sont pas conçues pour être utilisées dans une application avec élévation de privilèges). L’extrait de code ci-dessous montre comment vous pouvez utiliser le générateur de source C#/Win32 P/Invoke (CsWin32) pour appeler les API de sélection Win32 à la place. Pour savoir comment utiliser CsWin32, suivez ce lien pour la documentation.

// 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;
            }
        }
    }
}

Historique des versions

Version de Windows Version du SDK Valeur ajoutée
1903 18362 CreateForUser
1903 18362 Utilisateur

Constructeurs

FileSavePicker()

Crée une instance d’un FileSavePicker.

Dans une application de bureau, avant d’utiliser une instance de cette classe d’une manière qui affiche l’interface utilisateur, vous devez associer l’objet au handle de fenêtre de son propriétaire. Pour plus d’informations et des exemples de code, consultez Afficher des objets d’interface utilisateur WinRT qui dépendent de CoreWindow.

Propriétés

CommitButtonText

Obtient ou définit le texte d’étiquette du bouton commit dans l’interface utilisateur du sélecteur de fichiers.

ContinuationData

Obtient un ensemble de valeurs à remplir par l’application avant une opération PickSaveFileAndContinue qui désactive l’application afin de fournir un contexte lorsque l’application est activée. (Windows Phone application 8.x)

DefaultFileExtension

Important

N'utilisez pas cette propriété. Utilisez la propriété FileTypeChoices à la place. L’extension de fichier par défaut est définie par le premier type de fichier dans le premier groupe de types de fichiers dans FileTypeChoices.

Obtient ou définit l’extension de nom de fichier par défaut que fileSavePicker donne aux fichiers à enregistrer.

EnterpriseId

Obtient ou définit un ID qui spécifie l’entreprise propriétaire du fichier.

FileTypeChoices

Obtient la collection de types de fichiers valides que l’utilisateur peut choisir d’affecter à un fichier.

SettingsIdentifier

Obtient ou définit l’identificateur de paramètres associé à l’instance FileSavePicker actuelle.

SuggestedFileName

Obtient ou définit le nom de fichier que le sélecteur d’enregistrement de fichier suggère à l’utilisateur.

SuggestedSaveFile

Obtient ou définit le storageFile que le sélecteur de fichiers suggère à l’utilisateur d’enregistrer un fichier.

SuggestedStartLocation

Obtient ou définit l’emplacement que le sélecteur d’enregistrement de fichiers suggère à l’utilisateur comme emplacement d’enregistrement d’un fichier.

User

Obtient des informations sur l’utilisateur pour lequel FileSavePicker a été créé. Utilisez cette propriété pour les applications multi-utilisateurs.

Méthodes

CreateForUser(User)

Crée un FileSavePicker qui est limité au répertoire personnel de l’utilisateur spécifié. Utilisez cette méthode pour les applications multi-utilisateurs.

PickSaveFileAndContinue()

Obsolète à partir de Windows 10 ; utilisez Plutôt PickSaveFileAsync. Affiche le sélecteur de fichiers afin que l’utilisateur puisse enregistrer un fichier, désactiver et l’application et le réactiver une fois l’opération terminée. (Windows Phone application 8.x)

PickSaveFileAsync()

Affiche le sélecteur de fichiers afin que l’utilisateur puisse enregistrer un fichier et définir le nom, l’extension et l’emplacement du fichier à enregistrer. (application UWP)

S’applique à

Voir aussi