Compartir a través de


Asistentes del sistema de archivos

Examinar ejemplo. Examinar el ejemplo

En este artículo se describe cómo puedes usar la interfaz IFileSystem de .NET Multi-platform App UI (.NET MAUI). Esta interfaz ofrece métodos auxiliares que acceden a los directorios de datos y a la memoria caché de la aplicación, y ayudan a acceder a los archivos del paquete de la aplicación.

La implementación predeterminada de la interfaz IFileSystem está disponible a través de la propiedad FileSystem.Current. Tanto la interfaz IFileSystem como la clase FileSystem están contenidas en el espacio de nombres Microsoft.Maui.Storage.

Uso de asistentes del sistema de archivos

Cada sistema operativo tendrá rutas de acceso únicas a la memoria caché de aplicaciones y a los directorios de datos de la aplicación. La interfaz IFileSystem proporciona una API multiplataforma para acceder a estas rutas de acceso de directorio.

Directorio de caché

Para obtener el directorio de la aplicación para almacenar datos en caché. Los datos en caché se pueden usar para cualquier dato que se tenga que conservar más tiempo que los temporales, pero no deben ser datos necesarios para que el funcionamiento de la aplicación, ya que el sistema operativo puede borrar este almacenamiento.

string cacheDir = FileSystem.Current.CacheDirectory;

Directorio de datos de aplicación

Para obtener el directorio de nivel superior de la aplicación para todos los archivos que no son archivos de datos de usuario. Se realiza una copia de seguridad de estos archivos con el marco de sincronización del sistema operativo.

string mainDir = FileSystem.Current.AppDataDirectory;

Archivos agrupados

Para abrir un archivo que se agrupa en el paquete de la aplicación, usa el método OpenAppPackageFileAsync y pasa el nombre de archivo. Este método devuelve un valor de solo lectura Stream que representa el contenido del archivo. En el ejemplo siguiente se muestra cómo usar un método para leer el contenido de texto de un archivo:

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

En el ejemplo siguiente se muestra cómo abrir un archivo de fuente agrupado desde el paquete de la aplicación:

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

Copia de un archivo agrupado en la carpeta de datos de la aplicación

No se puede modificar el archivo agrupado de una aplicación. Pero puedes copiar un archivo agrupado en el directorio de la memoria caché o en el directorio de datos de la aplicación. En el ejemplo siguiente se usa OpenAppPackageFileAsync para copiar un archivo agrupado en la carpeta de datos de la aplicación:

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

Diferencias entre plataformas

En esta sección se describen las diferencias específicas de la plataforma con los asistentes del sistema de archivos.

  • FileSystem.CacheDirectory
    CacheDirectory: devuelve CacheDir del contexto actual.

  • FileSystem.AppDataDirectory
    Devuelve el FilesDir del contexto actual y se realiza una copia de seguridad mediante Copia de seguridad automática a partir de la API 23 y versiones posteriores.

  • FileSystem.OpenAppPackageFileAsync
    Los archivos que se agregaron al proyecto con la Acción de compilación de MauiAsset se pueden abrir con este método. Los proyectos de .NET MAUI procesarán cualquier archivo de la carpeta Resources\Raw como MauiAsset.

    El método FileSystem.OpenPackageFileAsync no puede obtener la longitud de la secuencia en Android accediendo a la propiedad Result.Length. En su lugar, deberás leer toda la secuencia y contar cuántos bytes hay para obtener el tamaño del recurso.