文件系统帮助程序
本文介绍如何使用 .NET Multi-platform App UI (.NET MAUI) IFileSystem
接口。 该接口提供访问应用缓存和数据目录的帮助程序方法,并帮助访问应用软件包中的文件。
IFileSystem
接口的默认实现通过 FileSystem.Current
属性提供。 IFileSystem
接口和 FileSystem
类都包含在 Microsoft.Maui.Storage
命名空间中。
使用文件系统帮助程序
每个操作系统都将有唯一的应用缓存和应用数据目录路径。 IFileSystem
接口为访问这些目录路径提供跨平台 API。
缓存目录
获取应用程序的目录以存储缓存数据。 缓存数据可用于任何需要比临时数据持续更长时间的数据,但不应是运行应用所需的数据,因为操作系统可能会清除该存储。
string cacheDir = FileSystem.Current.CacheDirectory;
应用数据目录
获取应用顶层目录中任何非用户数据文件。 这些文件是使用同步框架的操作系统进行备份的。
string mainDir = FileSystem.Current.AppDataDirectory;
捆绑文件
如果要打开捆绑到应用软件包中的文件,请使用 OpenAppPackageFileAsync
方法并传递文件名。 该方法返回一个只读 Stream 文件内容。 下列示例演示如何使用方法读取文件的文本内容:
public async Task<string> ReadTextFile(string filePath)
{
using Stream fileStream = await FileSystem.Current.OpenAppPackageFileAsync(filePath);
using StreamReader reader = new StreamReader(fileStream);
return await reader.ReadToEndAsync();
}
以下示例演示了如何从应用包打开捆绑的字体文件:
await using var myFont = await FileSystem.OpenAppPackageFileAsync("MyFont.ttf");
将捆绑文件复制到应用数据文件夹
无法修改应用的捆绑文件。 但可以将捆绑文件复制到缓存目录或应用数据目录。 下列示例使用 OpenAppPackageFileAsync
将捆绑文件复制到应用数据文件夹:
public async Task CopyFileToAppDataDirectory(string filename)
{
// Open the source file
using Stream inputStream = await FileSystem.Current.OpenAppPackageFileAsync(filename);
// Create an output filename
string targetFile = Path.Combine(FileSystem.Current.AppDataDirectory, filename);
// Copy the file to the AppDataDirectory
using FileStream outputStream = File.Create(targetFile);
await inputStream.CopyToAsync(outputStream);
}
平台差异
本部分介绍特定平台与文件系统帮助程序之间的差异。
FileSystem.CacheDirectory
返回当前上下文的 CacheDir。FileSystem.AppDataDirectory
返回当前上下文的 FilesDir,从 API 23 及以上版本开始,这些文件将使用 Auto Backup 备份。FileSystem.OpenAppPackageFileAsync
使用 MauiAsset 的 Build Action 添加到项目中的文件可用此方法打开。 .NET MAUI 项目将把 Resources\Raw 文件夹中的任何文件当作 MauiAsset 处理。在 Android 系统中,
FileSystem.OpenPackageFileAsync
方法无法通过访问Result.Length
属性获得流的长度。 相反,必须读取整个数据流,并计算字节数,才能获取资产大小。