本主题介绍开始从通用 Windows 平台 (UWP) 应用中读取和写入文件所需的内容。 引入了主要 API 和类型,并提供链接来帮助你了解详细信息。
这不是教程。 如果需要教程,请参阅 创建、写入和读取文件,除了演示如何创建、读取和写入文件外,还演示如何使用缓冲区和流。 你可能还对 文件访问示例感兴趣,该示例显示如何创建、读取、写入、复制和删除文件,以及如何检索文件属性并记住文件或文件夹,以便应用能够再次轻松访问该文件。
我们将介绍用于编写和读取文件中文本的代码,以及如何访问应用的本地、漫游和临时文件夹。
需要了解哪些信息
以下是需要了解的读取或写入文件文本的主要类型:
Windows.Storage.StorageFile 表示文件。 此类具有提供有关文件的信息的属性,以及用于创建、打开、复制、删除和重命名文件的方法。 你可能习惯于处理字符串路径。 有一些 Windows 运行时 API 采用字符串路径,但通常使用 StorageFile 来表示文件,因为 UWP 中处理的某些文件可能没有路径,或者可能具有不易操作的路径。 使用 StorageFile.GetFileFromPathAsync() 将字符串路径转换为 StorageFile。
FileIO 类提供了一种读取和写入文本的简单方法。 此类还可以读取/写入字节数组或缓冲区的内容。 此类与 PathIO 类非常类似。 主要区别在于,它不像 PathIO 那样采用字符串路径,而是采用 StorageFile。
Windows.Storage.StorageFolder 表示文件夹(目录)。 此类提供用于创建文件、查询文件夹内容,以及创建、重命名和删除文件夹的方法,还有提供有关文件夹信息的属性。
获取 StorageFolder 的常见方法包括:
- Windows.Storage.Pickers.FolderPicker,允许用户导航到要使用的文件夹。
- Windows.Storage.ApplicationData.Current,它提供了应用程序本地文件夹之一的 StorageFolder,例如本地文件夹、漫游文件夹和临时文件夹。
- Windows.Storage.KnownFolders,它为已知库(如音乐或图片库)提供 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 | 提供了一种简单的方法,可以通过文件的字符串路径来读取或写入文件中的文本。 这个类还可以读取和写入字节数组或缓冲区的内容。 |
DataReader 和 DataWriter | 从/向流读取和写入缓冲区、字节、整数、GUID、TimeSpan 等。 |
Windows.Storage.ApplicationData.Current | 提供对为应用创建的文件夹的访问权限,例如本地文件夹、漫游文件夹和临时文件文件夹。 |
Windows.Storage.Pickers.FolderPicker | 允许用户选择一个文件夹,并为其返回 StorageFolder。 这是如何访问应用默认无法访问的位置的方法。 |
Windows.Storage.Pickers.FileOpenPicker | 允许用户选择要打开的文件,并为其返回 StorageFile。 这是在应用程序默认无法访问的情况下获取文件访问权限的方法。 |
Windows.Storage.Pickers.FileSavePicker | 允许用户为文件选择文件名、扩展名和存储位置。 返回 StorageFile。 这是将文件保存到应用默认无法访问的位置的方式。 |
Windows.Storage.Streams 命名空间 | 涵盖读取和写入流。 具体而言,请查看 DataReader 和 DataWriter 类,这些类可读写缓冲区、字节、整数、GUID、TimeSpan 等。 |
有用的文档
主题 | DESCRIPTION |
---|---|
Windows.Storage 命名空间 | API 参考文档。 |
文件、文件夹和库 | 概念文档。 |
创建、写入和读取文件 | 介绍如何创建、读取和写入文本、二进制数据和流。 |
开始在本地存储应用数据 | 除了涵盖保存本地数据的最佳做法外,还涵盖 LocalSettings 和 LocalCache 文件夹的用途。 |
存储和检索设置和其他应用数据 | 概述各种应用数据存储,例如本地、漫游和临时文件夹。 |
文件访问权限 | 有关应用可以访问的文件系统位置的信息。 |
使用选取器打开文件和文件夹 | 演示如何让用户通过选取器界面访问文件和文件夹。 |
Windows.Storage.Streams | 用于读取和写入流的类型。 |
音乐、图片和视频库中的文件和文件夹 | 介绍如何从库中删除文件夹、获取库中的文件夹列表,以及发现存储的照片、音乐和视频。 |
有用的代码示例
代码示例 | DESCRIPTION |
---|---|
应用程序数据示例 | 演示如何使用应用程序数据 API 存储和检索特定于每个用户的数据。 |
文件访问示例 | 演示如何创建、读取、写入、复制和删除文件。 |
文件选取器示例 | 演示如何使用 UI 让用户选择文件和文件夹,以及如何保存文件,以便用户可以指定要保存的文件的名称、文件类型和位置。 |
JSON 示例 | 演示如何使用 Windows.Data.Json 命名空间对 JavaScript 对象表示法(JSON)对象、数组、字符串、数字和布尔值进行编码和解码。 |
其他代码示例 | 在类别下拉列表中选择 文件、文件夹和库。 |