Condividi tramite


FileSaver

FileSaver consente di selezionare una cartella di destinazione e salvare i file nel file system.

Screenshot di un FileSaver in macOS

Per l'oggetto FileSaversono necessarie le precondizioni seguenti:

Se il livello api del dispositivo di destinazione è minore di 33, aggiungere autorizzazioni a AndroidManifest.xml:

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

Quando l'app è destinata al livello API Android 34 e versioni successiva, non sono necessarie autorizzazioni aggiuntive.

Per altre informazioni sull'autorizzazione di archiviazione Android, vedere la documentazione di Android relativa a Manifest.permission

Utilizzo di base

L'oggetto FileSaver può essere aggiunto a un'applicazione MAUI .NET nel modo seguente.

Richiedere autorizzazioni

Gli sviluppatori devono richiedere manualmente Permissions.StorageRead e Permissions.StorageWrite prima di salvare i file:

async Task RequestStoragePermissionsAndSaveFile(CancellationToken cancellationToken)
{
    var readPermissionStatus = await Permissions.RequestAsync<Permissions.StorageRead>();
    var writePermissionStatus = await Permissions.RequestAsync<Permissions.StorageWrite>();

    if (readPermissionStatus != PermissionStatus.Granted ||
        writePermissionStatus != PermissionStatus.Granted)
    {
        await Toast
            .Make("Storage permissions are required to save files.")
            .Show(cancellationToken);

        return;
    }

    await SaveFile(cancellationToken);
}

Salva il file

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 nel caso in cui il file sia piuttosto grande e richiede tempo per essere salvato, potrebbe essere interessato a conoscere lo stato di avanzamento:

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

Methods

Metodo Descrzione
SaveAsync Richiede l'autorizzazione, consente di selezionare una cartella e salvare i file nel file system.

FileSaverResult

Risultato restituito dal SaveAsync metodo . Può essere usato per verificare se il salvataggio è stato eseguito correttamente, controllare dove è stato salvato il file e accedere anche a eventuali eccezioni che potrebbero essersi verificate durante il salvataggio.

Proprietà

Proprietà TIPO Descrzione
FilePath string Percorso sul disco in cui è stato salvato il file.
Eccezione Exception Ottiene Exception se l'operazione di salvataggio non riesce.
ÈRiuscito bool Ottiene un valore che determina se l'operazione ha avuto esito positivo.

Methods

Metodo Descrzione
EnsureSuccess Verifica se l'operazione di salvataggio è riuscita.

Avviso

EnsureSuccess genererà un'eccezione Exception se l'operazione di salvataggio non riesce.

Registrazione delle dipendenze

Nel caso in cui si voglia inserire un servizio, è prima necessario registrarlo. Aggiornare MauiProgram.cs con le seguenti modifiche:

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

Ora è possibile inserire il servizio come segue:

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

Esempi

È possibile trovare un esempio di FileSaver in azione nell'applicazione di esempio .NET MAUI Community Toolkit.

API

È possibile trovare il codice sorgente per FileSaver nel repository GitHub della .NET MAUI Community Toolkit.