次の方法で共有


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 メソッドから返される結果。 これは、保存が成功したかどうかの確認と、ファイルが保存された場所の確認を行うために使用でき、さらに保存中に発生した可能性のある例外にアクセスするためにも使用できます。

Properties

プロパティ タイプ 説明
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);
	}
}

FileSaver の動作の例は、「.NET MAUI Community Toolkit サンプル アプリケーション」で確認できます。

API

FileSaver のソース コードは、.NET MAUI Community Toolkit の GitHub リポジトリにあります。