Asistentes del sistema de archivos
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 propiedadResult.Length
. En su lugar, deberás leer toda la secuencia y contar cuántos bytes hay para obtener el tamaño del recurso.