文件系统帮助程序

浏览示例。 浏览示例

本文介绍如何使用 .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
    使用 MauiAssetBuild Action 添加到项目中的文件可用此方法打开。 .NET MAUI 项目将把 Resources\Raw 文件夹中的任何文件当作 MauiAsset 处理。

    在 Android 系统中,FileSystem.OpenPackageFileAsync 方法无法通过访问 Result.Length 属性获得流的长度。 相反,必须读取整个数据流,并计算字节数,才能获取资产大小。