使用选取器保存文件

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

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

注释

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

注释

在桌面应用中(包括 WinUI 应用),可以使用 Microsoft.Windows.Storage.Pickers 命名空间访问文件和文件夹选取器。 此命名空间在 Windows 应用 SDK 版本 1.8 及更高版本中可用。 此命名空间中的 API 旨在与 WinUI 应用无缝配合工作,从而在不同的应用类型之间提供一致的体验。

如有必要,仍可使用 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

文件、文件夹和库

与文件选择器协议的集成

创建、写入和读取文件