FileSaver
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
的源代码