Partager via


FileSaver

FileSaver permet de sélectionner un dossier cible et d’enregistrer des fichiers dans le système de fichiers.

Capture d’écran d’un FileSaver sur macOS

Les conditions préalables suivantes sont requises pour le FileSaver :

Si le niveau de l’API de votre appareil cible est inférieur à 33, ajoutez des autorisations à AndroidManifest.xml:

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

Lorsque votre application cible le niveau 34 et supérieur de l’API Android, aucune autorisation supplémentaire n’est requise.

Pour plus d’informations sur l’autorisation de stockage Android, reportez-vous à la documentation Android sur Manifest.permission

Syntaxe

C#

Le FileSaver peut être utilisé de la manière suivante dans 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);
    }
}

Connaître la progression d’un fichier plutôt volumineux et prenant un certain temps pour être enregistré est susceptible de vous intéresser :

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éthodes

méthode Description
SaveAsync Demande l’autorisation, permet de sélectionner un dossier et d’enregistrer des fichiers dans le système de fichiers.

FileSaverResult

Le résultat retourné par la méthode SaveAsync. Cela peut être utilisé pour vérifier si l’enregistrement a réussi, vérifier où le fichier a été enregistré et accéder aux exceptions qui peuvent avoir eu lieu pendant l’enregistrement.

Propriétés

Propriété Type Description
FilePath string Emplacement sur le disque où le fichier a été enregistré.
Exception Exception Obtient la valeur Exception si l’opération d’enregistrement échoue.
IsSuccessful bool Obtient une valeur déterminant si l'opération a réussi.

Méthodes

méthode Description
EnsureSuccess Vérifie si l’opération d’enregistrement a réussi.

Avertissement

EnsureSuccess lève une Exception si l’opération d’enregistrement échoue.

Enregistrement des dépendances

Si vous souhaitez injecter un service, vous devez d’abord l’enregistrer. Mettez à jour MauiProgram.cs avec les modifications suivantes :

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

Vous pouvez maintenant injecter le service comme ceci :

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

Exemples

Vous pouvez trouver un exemple de FileSaver en action dans l'exemple d'application de la boîte à outils de la communauté .NET MAUI.

API

Vous pouvez trouver le code source deFileSaver sur le référentiel du kit de ressources de la communauté .NET MAUI sur GitHub.