使用选取器保存文件

重要的应用程序接口(API)

使用 FileSavePicker 让用户指定他们希望应用保存文件的名称和位置。

注释

 有关完整示例,请参阅 文件选取器示例

注释

在桌面应用中(包括 WinUI 3 应用),可以使用 Windows.Storage.Pickers 中的文件和文件夹选取器。 但是,如果桌面应用需要管理员权限才能运行,你将需要一种不同的方法,因为这些 API 并未设计用于具有管理员权限的应用中。 有关示例,请参阅 FileSavePicker

先决条件

  • 了解通用 Windows 平台(UWP)应用的异步编程

    了解如何在 C# 或 Visual Basic 中编写异步应用,请参阅 在 C# 或 Visual Basic 中调用异步 API。 若要了解如何在C++中编写异步应用,请参阅C++中的 异步编程。

  • 对位置 的访问权限

    请参阅 文件访问权限

FileSavePicker:步骤详解

使用 FileSavePicker,以便用户可以指定要保存的文件的名称、类型和位置。 创建、自定义和显示文件选取器对象,然后通过返回的 StorageFile 对象保存数据,该对象表示选取的文件。

  1. 创建和自定义 FileSavePicker

    var savePicker = new Windows.Storage.Pickers.FileSavePicker();
    savePicker.SuggestedStartLocation =
        Windows.Storage.Pickers.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";
    

    在与用户和应用相关的文件选取器对象上设置属性。 此示例设置三个属性:SuggestedStartLocationFileTypeChoicesSuggestedFileName

    • 由于用户正在保存文档或文本文件,因此示例通过使用 localFolderSuggestedStartLocation 设置为应用的本地文件夹。 将 SuggestedStartLocation 设置为适合所保存文件类型的位置,例如音乐、图片、视频或文档。 从起始位置,用户可以导航到其他位置。

    • 由于我们希望确保应用可以在保存后打开该文件,因此我们使用 FileTypeChoices 指定示例支持的文件类型(Microsoft Word 文档和文本文件)。 请确保应用支持你指定的所有文件类型。 用户将能够将其文件另存为你指定的任何文件类型。 它们还可以通过选择指定的另一种文件类型来更改文件类型。 默认情况下,将选中列表中的第一个文件类型选项:若要控制该选项,请设置 DefaultFileExtension 属性。

    注释

     文件选取器还使用当前选定的文件类型来筛选它显示的文件,以便仅向用户显示与所选文件类型匹配的文件类型。

    • 为了减少用户的输入量,本示例设置 SuggestedFileName。 使建议的文件名与要保存的文件相关。 例如,与 Word 一样,可以建议现有文件名(如果有)或用户正在保存尚没有名称的文件时文档的第一行。

    注释

      FileSavePicker 对象使用 PickerViewMode.List 视图模式显示文件选取器。

  2. 显示 FileSavePicker 并保存到选取的文件

    通过调用 PickSaveFileAsync 来显示文件选取器。 在用户指定名称、文件类型和位置并确认保存文件后,PickSaveFileAsync 返回表示已保存文件的 StorageFile 对象。 现在您可以捕获并处理此文件,因为您已经拥有读取和写入权限。

    Windows.Storage.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.
        Windows.Storage.CachedFileManager.DeferUpdates(file);
        // write to file
        await Windows.Storage.FileIO.WriteTextAsync(file, "file contents");
        // 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.
        Windows.Storage.Provider.FileUpdateStatus status =
            await Windows.Storage.CachedFileManager.CompleteUpdatesAsync(file);
        if (status == Windows.Storage.Provider.FileUpdateStatus.Complete)
        {
            this.textBlock.Text = "File " + file.Name + " was saved.";
        }
        else
        {
            this.textBlock.Text = "File " + file.Name + " couldn't be saved.";
        }
    }
    else
    {
        this.textBlock.Text = "Operation cancelled.";
    }
    

该示例检查文件是否有效,并将自己的文件名写入其中。 另请参阅 创建、写入和读取文件

小窍门

 应始终检查保存的文件,以确保它在执行任何其他处理之前有效。 然后,可以根据应用的要求将内容保存到文件,并在选取的文件无效时提供相应的处理措施。

另请参阅

Windows.Storage.Pickers

文件、文件夹和库

与文件选择器协议的集成

创建、写入和读取文件