Auxiliares do sistema de arquivos
Este artigo descreve como você pode usar a interface do usuário do aplicativo .NET multiplataforma (.NET MAUI) IFileSystem
. A interface também fornece métodos auxiliares que acessam o cache e os diretórios de dados do aplicativo e ajuda a acessar arquivos no pacote do aplicativo.
A implementação padrão da interface IFileSystem
está disponível por meio da propriedade FileSystem.Current
. A interface IFileSystem
e a classe FileSystem
estão contidas no namespace Microsoft.Maui.Storage
.
Uso de auxiliares do sistema de arquivos
Cada sistema operacional terá caminhos exclusivos para o cache do aplicativo e diretórios de dados do aplicativo. A interface IFileSystem
fornece uma API multiplataforma para acessar esses caminhos de diretório.
Diretório de cache
Para fazer com que o diretório do aplicativo armazene dados de cache. Os dados de cache podem ser usados para todos os dados que precisem persistir por mais tempo do que os dados temporários, mas não devem ser dados necessários para operar o aplicativo, pois o sistema operacional pode limpar esse armazenamento.
string cacheDir = FileSystem.Current.CacheDirectory;
Diretório de dados de aplicativo
Para obter o diretório de nível superior do aplicativo para arquivos que não são arquivos de dados do usuário. O backup desses arquivos ocorre na estrutura de sincronização do sistema operacional.
string mainDir = FileSystem.Current.AppDataDirectory;
Arquivos agrupados
Para abrir um arquivo que está agrupado no pacote do aplicativo, use o método OpenAppPackageFileAsync
e passe o nome do arquivo. Esse método retorna um Stream somente leitura que representa o conteúdo do arquivo. O exemplo a seguir demonstra o uso de um método para ler o conteúdo de texto de um arquivo:
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();
}
O exemplo a seguir demonstra como abrir um arquivo de fonte agrupado do pacote do aplicativo:
await using var myFont = await FileSystem.OpenAppPackageFileAsync("MyFont.ttf");
Copiar um arquivo agrupado para a pasta de dados de aplicativo
Você não pode modificar o arquivo agrupado de um aplicativo. Mas você pode copiar um arquivo agrupado para o diretório de cache ou diretório de dados de aplicativo. O exemplo a seguir usa OpenAppPackageFileAsync
para copiar um arquivo agrupado para a pasta de dados do aplicativo:
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);
}
Diferenças de plataforma
Esta seção descreve as diferenças específicas de cada plataforma com os auxiliares do sistema de arquivos.
FileSystem.CacheDirectory
Retorna o CacheDir do contexto atual.FileSystem.AppDataDirectory
Retorna o FilesDir do contexto atual, que é feito com backup usando o Backup automático começando na API 23 e superior.FileSystem.OpenAppPackageFileAsync
Os arquivos que foram adicionados ao projeto com o Criar ação do MauiAsset podem ser abertos com esse método. Os projetos .NET MAUI processarão todo arquivo na pasta Recursos\Bruto como um MauiAsset.O método
FileSystem.OpenPackageFileAsync
não pode obter o comprimento do fluxo no Android acessando a propriedadeResult.Length
. Em vez disso, você precisa ler todo o fluxo e contar quantos bytes existem para obter o tamanho do ativo.