Partager via


Programmes d’assistance du système de fichiers

Parcourez l’exemple. Parcourir l'exemple

Dans cet article, vous allez apprendre à utiliser l’interface IFileSystem de l’application multiplateforme .NET (.NET MAUI). Cette interface fournit des méthodes d’aide qui permettent d’accéder aux répertoires de cache et de données de l’application, ainsi qu’aux fichiers du paquetage de l’application.

L’implémentation par défaut de l’interface IFileSystem est disponible via la propriété FileSystem.Current. L’espace de noms Microsoft.Maui.Storage contient à la fois l’interface IFileSystem et la classe FileSystem.

Utilisation des programmes d’assistance du système de fichiers

Chaque système d’exploitation aura des chemins uniques vers le cache de l’application et les répertoires de données d’application. L’interface IFileSystem fournit une API multiplateforme pour accéder à ces chemins d’accès d’annuaire.

Répertoire du cache

Permet au répertoire de l’application de stocker les données du cache. Les données de cache peuvent être utilisées pour toutes les données qui doivent persister plus longtemps que les données temporaires, mais ne doivent pas être des données nécessaires au fonctionnement de l’application, car le système d’exploitation peut effacer ce stockage.

string cacheDir = FileSystem.Current.CacheDirectory;

Répertoire des données de l’application

Pour obtenir le répertoire de niveau supérieur de l’application pour tous les fichiers qui ne sont pas des fichiers de données utilisateur. Ces fichiers sont sauvegardés avec le framework de synchronisation du système d’exploitation.

string mainDir = FileSystem.Current.AppDataDirectory;

Fichiers groupés

Pour ouvrir un fichier groupé dans le package d’application, utilisez la méthode OpenAppPackageFileAsync et transmettez le nom de fichier. Cette méthode renvoie une Stream en lecture seule représentant le contenu du fichier. L’exemple suivant illustre l’utilisation d’une méthode pour lire le contenu texte d’un fichier :

public async Task<string> ReadTextFile(string filePath)
{
    using Stream fileStream = await FileSystem.Current.OpenAppPackageFileAsync(filePath);
    using StreamReader reader = new StreamReader(fileStream);

    return await reader.ReadToEndAsync();
}

L’exemple suivant montre comment ouvrir un fichier de police groupé à partir du package de l’application :

await using var myFont = await FileSystem.OpenAppPackageFileAsync("MyFont.ttf");

Copier un fichier groupé dans le dossier de données de l’application

Vous ne pouvez pas modifier le fichier groupé d’une application. Toutefois, vous pouvez copier un fichier groupé dans le répertoire de cache ou répertoire de données d’application. L’exemple suivant utilise OpenAppPackageFileAsync pour copier un fichier groupé dans le dossier de données de l’application :

public async Task CopyFileToAppDataDirectory(string filename)
{
    // Open the source file
    using Stream inputStream = await FileSystem.Current.OpenAppPackageFileAsync(filename);

    // Create an output filename
    string targetFile = Path.Combine(FileSystem.Current.AppDataDirectory, filename);

    // Copy the file to the AppDataDirectory
    using FileStream outputStream = File.Create(targetFile);
    await inputStream.CopyToAsync(outputStream);
}

Différences selon les plateformes

Cette section décrit les différences entre les plates-formes et les aides au système de fichiers.

  • FileSystem.CacheDirectory
    Retourne le CacheDir du contexte actuel.

  • FileSystem.AppDataDirectory
    Retourne le FilesDir du contexte actuel, qui sont sauvegardés à l’aide de sauvegarde automatique à partir de l’API 23 et versions ultérieures.

  • FileSystem.OpenAppPackageFileAsync
    Les fichiers qui ont été ajoutés au projet avec l’action de génération de MauiAsset peuvent être ouverts avec cette méthode. Les projets .NET MAUI traitent n’importe quel fichier dans le dossier Resources\Raw en tant que MauiAsset.

    La méthode FileSystem.OpenPackageFileAsync ne peut pas obtenir la longueur du flux sur Android en accédant à la propriété Result.Length. Au lieu de cela, vous devez lire l’ensemble du flux et compter le nombre d’octets qu’il y a pour obtenir la taille de la ressource.