Compartilhar via


FileSaver

O FileSaver proporciona a capacidade de selecionar a pasta de destino e salvar arquivos no sistema de arquivos.

Captura de tela de um FileSaver no macOS

As seguintes pré-condições são necessárias para o FileSaver:

Se o nível de API do seu dispositivo de destino for menor que 33, adicione permissões a AndroidManifest.xml:

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

Quando seu aplicativo tem como destino uma API de Android de nível 34 ou superior, nenhuma permissão adicional é necessária.

Para obter mais informações sobre a permissão de armazenamento do Android, consulte a documentação do Android sobre Manifest.permission

Sintaxe

C#

O FileSaver pode ser usado da seguinte maneira em 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);
    }
}

ou, caso o arquivo seja bastante grande e leve algum tempo para ser salvo, talvez você esteja interessado em saber o progresso:

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);
    }
}

Métodos

Método Descrição
SaveAsync Solicita permissão, permite selecionar uma pasta e salvar arquivos no sistema de arquivos.

FileSaverResult

O resultado retornado do método SaveAsync. Isso pode ser usado para verificar se o salvamento foi bem-sucedido, verificar onde o arquivo foi salvo e também acessar quaisquer exceções que possam ter ocorrido durante o salvamento.

Propriedades

Propriedade Type Descrição
FilePath string O local no disco em que o arquivo foi salvo.
Exceção Exception Obtém o Exception se a operação de salvamento falhar.
IsSuccessful bool Obtém um valor que determina se a operação foi bem-sucedida.

Métodos

Método Descrição
EnsureSuccess Verifica se a operação de salvamento foi bem-sucedida.

Aviso

EnsureSuccess gerará uma Exception caso a operação de salvamento não seja bem-sucedida.

Registro de dependência

Caso queira injetar um serviço, primeiro é necessário cadastrá-lo. Atualize MauiProgram.cs com as próximas alterações:

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();
    }
}

Agora você pode injetar o serviço da seguinte maneira:

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);
	}
}

Exemplos

Você pode encontrar um exemplo de FileSaver em ação no Aplicativo de exemplo do .NET MAUI Community Toolkit.

API

O código-fonte do FileSaver pode ser encontrado no repositório GitHub do .NET MAUI Community Toolkit.