FileSaver

FileSaver 提供选择目标文件夹并将文件保存到文件系统的功能。

macOS 上的 FileSaver 的屏幕截图

FileSaver 需要满足以下先决条件:

如果目标设备 API 级别小于 33,请向 AndroidManifest.xml 添加权限:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

当应用面向 Android API 级别 34 及更高版本时,无需其他权限。

有关 Android 存储权限的详细信息,请参阅有关 Manifest.permission 的 Android 文档

语法

C#

FileSaver 可在 C# 中按如下所示方式使用:

async Task SaveFile(CancellationToken cancellationToken)
{
    using var stream = new MemoryStream(Encoding.Default.GetBytes("Hello from the Community Toolkit!"));
    var fileSaverResult = await FileSaver.Default.SaveAsync("test.txt", stream, cancellationToken);
    if (fileSaverResult.IsSuccessful)
    {
        await Toast.Make($"The file was saved successfully to location: {fileSaverResult.FilePath}").Show(cancellationToken);
    }
    else
    {
        await Toast.Make($"The file was not saved successfully with error: {fileSaverResult.Exception.Message}").Show(cancellationToken);
    }
}

或者,如果文件较大,并且需要一些时间来保存,你可能希望了解进度:

async Task SaveFile(CancellationToken cancellationToken)
{
    using var stream = new MemoryStream(Encoding.Default.GetBytes("Hello from the Community Toolkit!"));
    var saverProgress = new Progress<double>(percentage => ProgressBar.Value = percentage);
    var fileSaverResult = await FileSaver.Default.SaveAsync("test.txt", stream, saverProgress, cancellationToken);
    if (fileSaverResult.IsSuccessful)
    {
        await Toast.Make($"The file was saved successfully to location: {fileSaverResult.FilePath}").Show(cancellationToken);
    }
    else
    {
        await Toast.Make($"The file was not saved successfully with error: {fileSaverResult.Exception.Message}").Show(cancellationToken);
    }
}

方法

方法 说明
SaveAsync 请求权限,允许选择文件夹并将文件保存到文件系统。

FileSaverResult

SaveAsync 方法返回的结果。 这可用于验证保存是否成功、检查文件的保存位置,以及访问保存期间可能发生的任何异常。

属性

属性 类型​​ 说明
FilePath string 磁盘上保存文件的位置。
Exception Exception 如果保存操作失败,则获取 Exception
IsSuccessful bool 获取确定操作是否成功的值。

方法

方法 说明
EnsureSuccess 验证保存操作是否成功。

警告

如果保存操作失败,EnsureSuccess 将引发 Exception

依赖项注册

如果要注入服务,首先需要注册该服务。 使用以下更改更新 MauiProgram.cs

public static class MauiProgram
{
    public static MauiApp CreateMauiApp()
    {
        var builder = MauiApp.CreateBuilder();
        builder
            .UseMauiApp<App>()
			.UseMauiCommunityToolkit();

		builder.Services.AddSingleton<IFileSaver>(FileSaver.Default);
        return builder.Build();
    }
}

现在,可以按如下方式注入该服务:

public partial class MainPage : ContentPage
{
    private readonly IFileSaver fileSaver;

	public MainPage(IFileSaver fileSaver)
	{
		InitializeComponent();
        this.fileSaver = fileSaver;
	}
	
	public async void SaveFile(object sender, EventArgs args)
	{
		using var stream = new MemoryStream(Encoding.Default.GetBytes("Hello from the Community Toolkit!"));
        var fileSaverResult = await fileSaver.SaveAsync("test.txt", stream, cancellationToken);
        fileSaverResult.EnsureSuccess();
        await Toast.Make($"File is saved: {fileSaverResult.FilePath}").Show(cancellationToken);
	}
}

示例

可以在 .NET MAUI 社区工具包示例应用程序中查找 FileSaver 的示例。

API

可以在 .NET MAUI 社区工具包 GitHub 存储库查看FileSaver 的源代码