使用文件

本主题介绍开始从通用 Windows 平台 (UWP) 应用中读取和写入文件所需的内容。 引入了主要 API 和类型,并提供链接来帮助你了解详细信息。

这不是教程。 如果需要教程,请参阅 创建、写入和读取文件,除了演示如何创建、读取和写入文件外,还演示如何使用缓冲区和流。 你可能还对 文件访问示例感兴趣,该示例显示如何创建、读取、写入、复制和删除文件,以及如何检索文件属性并记住文件或文件夹,以便应用能够再次轻松访问该文件。

我们将介绍用于编写和读取文件中文本的代码,以及如何访问应用的本地、漫游和临时文件夹。

需要了解哪些信息

以下是需要了解的读取或写入文件文本的主要类型:

  • Windows.Storage.StorageFile 表示文件。 此类具有提供有关文件的信息的属性,以及用于创建、打开、复制、删除和重命名文件的方法。 你可能习惯于处理字符串路径。 有一些 Windows 运行时 API 采用字符串路径,但通常使用 StorageFile 来表示文件,因为 UWP 中处理的某些文件可能没有路径,或者可能具有不易操作的路径。 使用 StorageFile.GetFileFromPathAsync() 将字符串路径转换为 StorageFile

  • FileIO 类提供了一种读取和写入文本的简单方法。 此类还可以读取/写入字节数组或缓冲区的内容。 此类与 PathIO 类非常类似。 主要区别在于,它不像 PathIO 那样采用字符串路径,而是采用 StorageFile

  • Windows.Storage.StorageFolder 表示文件夹(目录)。 此类提供用于创建文件、查询文件夹内容,以及创建、重命名和删除文件夹的方法,还有提供有关文件夹信息的属性。

获取 StorageFolder 的常见方法包括:

将文本写入文件

在本简介中,我们将重点介绍一个简单的方案:读取和写入文本。 让我们首先了解一些代码,这些代码使用 FileIO 类将文本写入文件。

Windows.Storage.StorageFolder storageFolder = Windows.Storage.ApplicationData.Current.LocalFolder;
Windows.Storage.StorageFile file = await storageFolder.CreateFileAsync("test.txt",
        Windows.Storage.CreationCollisionOption.OpenIfExists);

await Windows.Storage.FileIO.WriteTextAsync(file, "Example of writing a string\r\n");

// Append a list of strings, one per line, to the file
var listOfStrings = new List<string> { "line1", "line2", "line3" };
await Windows.Storage.FileIO.AppendLinesAsync(file, listOfStrings); // each entry in the list is written to the file on its own line.

我们首先确定文件应位于何处。 Windows.Storage.ApplicationData.Current.LocalFolder 提供对本地数据文件夹的访问权限,该文件夹是在安装应用时为应用创建的。 有关应用可以访问的文件夹的详细信息,请参阅 访问文件系统

然后,我们使用 StorageFolder 创建文件(或将其打开(如果该文件已存在)。

FileIO 类提供了向文件写入文本的便捷方法。 FileIO.WriteTextAsync() 将文件的全部内容替换为提供的文本。 FileIO.AppendLinesAsync() 将字符串集合附加到文件中,每行写入一个字符串。

从文件读取文本

与写入文件一样,读取文件从指定文件所在的位置开始。 我们将使用与上例中相同的位置。 然后,我们将使用 FileIO 类读取其内容。

Windows.Storage.StorageFolder storageFolder = Windows.Storage.ApplicationData.Current.LocalFolder;
Windows.Storage.StorageFile file = await storageFolder.GetFileAsync("test.txt");

string text = await Windows.Storage.FileIO.ReadTextAsync(file);

还可以使用 IList<string> contents = await Windows.Storage.FileIO.ReadLinesAsync(sampleFile); 将文件的每一行读入集合中的单个字符串

访问文件系统

在 UWP 平台中,文件夹访问权限受到限制,以确保用户数据的完整性和隐私性。

应用文件夹

安装 UWP 应用后,将在 c:\users<用户名下创建多个文件夹,>\AppData\Local\Packages<应用包标识符>\ 存储应用本地、漫游和临时文件等。 应用不需要声明任何访问这些文件夹的功能,其他应用无法访问这些文件夹。 卸载应用时,也会删除这些文件夹。

以下是常用的一些应用文件夹:

  • LocalState:与当前设备相关的本地数据。 备份设备后,此目录中的数据将保存在 OneDrive 的备份映像中。 如果用户重置或替换设备,则将还原数据。 访问此文件夹以使用 Windows.Storage.ApplicationData.Current.LocalFolder. 保存不希望备份到 OneDrive 的本地数据。您可以通过 访问 Windows.Storage.ApplicationData.Current.LocalCacheFolder

  • RoamingState:此处存储的数据不再漫游(从 Windows 11 开始),但文件夹仍可用。 使用 Windows.Storage.ApplicationData.Current.RoamingFolder访问漫游文件夹。 建议的替换项 Azure 应用服务。 Azure 应用服务受到广泛支持、记录良好、可靠,并支持跨平台/跨生态系统方案,例如 iOS、Android 和 Web。

  • TempState:对于在应用未运行的时候可能会被删除的数据。 使用 Windows.Storage.ApplicationData.Current.TemporaryFolder访问此文件夹。

访问文件系统的其余部分

UWP 应用必须声明其访问特定用户库的意图,方法是向其清单添加相应的功能。 应用安装时会提示用户,以确认他们是否授权访问指定的库。 如果没有安装,这个应用程序就没被安装。 有访问图片、视频和音乐库的功能。 有关完整列表,请参阅 应用功能声明。 如果要为这些库获取一个 StorageFolder,请使用 Windows.Storage.KnownFolders 类。

文档库

尽管有访问用户文档库的功能,但该功能受到限制,这意味着声明该文档库的应用将被Microsoft应用商店拒绝,除非你遵循一个过程获得特殊审批。 它不适用于常规用途。 请改用文件或文件夹选取器(请参阅 使用选取器打开文件和文件夹使用选取器保存文件),允许用户导航到文件夹或文件。 当用户导航到文件夹或文件时,他们已隐式授予应用访问它的权限,并且系统允许访问。

常规访问

或者,你的应用可以在其清单中声明受限的 broadFileSystem 功能,这还需要 Microsoft 应用商店的批准。 然后,应用可以访问用户有权访问的任何文件,而无需对文件或文件夹选取器进行干预。

有关应用可以访问的位置的完整列表,请参阅 文件访问权限

有用的 API 和文档

下面是 API 和其他有用文档的快速摘要,可帮助你开始使用文件和文件夹。

有用的 API

API(应用程序编程接口) DESCRIPTION
Windows.Storage.StorageFile 提供有关文件的信息,以及用于创建、打开、复制、删除和重命名文件的方法。
Windows.Storage.StorageFolder 提供有关文件夹、创建文件的方法以及创建、重命名和删除文件夹的方法的信息。
文件输入输出 提供一种读取和写入文本的简单方法。 这个类还可以读取和写入字节数组或缓冲区的内容。
PathIO 提供了一种简单的方法,可以通过文件的字符串路径来读取或写入文件中的文本。 这个类还可以读取和写入字节数组或缓冲区的内容。
DataReaderDataWriter 从/向流读取和写入缓冲区、字节、整数、GUID、TimeSpan 等。
Windows.Storage.ApplicationData.Current 提供对为应用创建的文件夹的访问权限,例如本地文件夹、漫游文件夹和临时文件文件夹。
Windows.Storage.Pickers.FolderPicker 允许用户选择一个文件夹,并为其返回 StorageFolder。 这是如何访问应用默认无法访问的位置的方法。
Windows.Storage.Pickers.FileOpenPicker 允许用户选择要打开的文件,并为其返回 StorageFile。 这是在应用程序默认无法访问的情况下获取文件访问权限的方法。
Windows.Storage.Pickers.FileSavePicker 允许用户为文件选择文件名、扩展名和存储位置。 返回 StorageFile。 这是将文件保存到应用默认无法访问的位置的方式。
Windows.Storage.Streams 命名空间 涵盖读取和写入流。 具体而言,请查看 DataReaderDataWriter 类,这些类可读写缓冲区、字节、整数、GUID、TimeSpan 等。

有用的文档

主题 DESCRIPTION
Windows.Storage 命名空间 API 参考文档。
文件、文件夹和库 概念文档。
创建、写入和读取文件 介绍如何创建、读取和写入文本、二进制数据和流。
开始在本地存储应用数据 除了涵盖保存本地数据的最佳做法外,还涵盖 LocalSettings 和 LocalCache 文件夹的用途。
存储和检索设置和其他应用数据 概述各种应用数据存储,例如本地、漫游和临时文件夹。
文件访问权限 有关应用可以访问的文件系统位置的信息。
使用选取器打开文件和文件夹 演示如何让用户通过选取器界面访问文件和文件夹。
Windows.Storage.Streams 用于读取和写入流的类型。
音乐、图片和视频库中的文件和文件夹 介绍如何从库中删除文件夹、获取库中的文件夹列表,以及发现存储的照片、音乐和视频。

有用的代码示例

代码示例 DESCRIPTION
应用程序数据示例 演示如何使用应用程序数据 API 存储和检索特定于每个用户的数据。
文件访问示例 演示如何创建、读取、写入、复制和删除文件。
文件选取器示例 演示如何使用 UI 让用户选择文件和文件夹,以及如何保存文件,以便用户可以指定要保存的文件的名称、文件类型和位置。
JSON 示例 演示如何使用 Windows.Data.Json 命名空间对 JavaScript 对象表示法(JSON)对象、数组、字符串、数字和布尔值进行编码和解码。
其他代码示例 在类别下拉列表中选择 文件、文件夹和库