共用方式為


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如果儲存工作失敗,則取得 。
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 Community Toolkit 範例應用程式中找到作用中的範例FileSaver

API

您可以在 .NET MAUI Community Toolkit GitHub 存放庫找到 的FileSaver原始程式碼。