Compartir a través de


FileSaver

FileSaver proporciona la capacidad de seleccionar una carpeta de destino y guardar archivos en el sistema de archivos.

Captura de pantalla de un FileSaver en macOS

Las siguientes condiciones previas son necesarias para FileSaver:

Si el nivel de API de dispositivo de destino es menor que 33, agregue permisos a AndroidManifest.xml:

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

Cuando la aplicación tiene como destino el nivel de API de Android 34 y versiones posteriores, no se requieren permisos adicionales.

Para obtener más información sobre el permiso de almacenamiento de Android, consulte la documentación de Android sobre Manifest.permission

Sintaxis

C#

El FileSaver se puede usar de la siguiente manera en 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);
    }
}

o en caso de que el archivo sea bastante grande y tarde un poco en guardarse, es posible que le interese conocer el progreso:

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 Descripción
SaveAsync Pide permiso, permite seleccionar una carpeta y guardar archivos en el sistema de archivos.

FileSaverResult

Resultado devuelto por el método SaveAsync. Esto se puede usar para comprobar si el guardado se realizó correctamente, comprobar dónde se guardó el archivo y también acceder a las excepciones que se pueden haber producido durante el guardado.

Propiedades

Propiedad Tipo Descripción
FilePath string Ubicación en el disco donde se guardó el archivo.
Exception Exception Obtiene el Exception si se produce un error en la operación de guardado.
IsSuccessful bool Obtiene un valor que determina si la operación se realizó correctamente.

Métodos

método Descripción
EnsureSuccess Comprueba si la operación de guardado se realizó correctamente.

Advertencia

EnsureSuccess producirá un Exception si la operación de guardado no se realiza correctamente.

Registro de dependencias

En caso de que desee insertar un servicio, primero debe registrarlo. Actualice MauiProgram.cs con los siguientes cambios:

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

Ahora puede insertar el servicio de la siguiente manera:

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

Ejemplos

Puede encontrar un ejemplo de FileSaver en acción en la aplicación de ejemplo del Kit de herramienta de la comunidad de .NET MAUI.

API

Puede encontrar el código fuente de FileSaver en el repositorio de GitHub del Kit de herramientas de la comunidad de .NET MAUI.