Helper del file system
Questo articolo descrive come usare l'interfaccia dell'interfaccia utente dell'app multipiattaforma .NET (.NET MAUI). IFileSystem
Questa interfaccia fornisce metodi helper che accedono alla cache e alle directory dati dell'app e consente di accedere ai file nel pacchetto dell'app.
L'implementazione predefinita dell'interfaccia IFileSystem
è disponibile tramite la FileSystem.Current
proprietà . Sia l'interfaccia che FileSystem
la IFileSystem
classe sono contenute nello spazio dei Microsoft.Maui.Storage
nomi .
Uso degli helper del file system
Ogni sistema operativo avrà percorsi univoci per la cache dell'app e le directory dei dati dell'app. L'interfaccia IFileSystem
fornisce un'API multipiattaforma per l'accesso a questi percorsi di directory.
Directory cache
Per ottenere la directory dell'applicazione in cui archiviare i dati della cache. I dati della cache possono essere usati per tutti i dati che devono essere persistenti più a lungo dei dati temporanei, ma non devono essere dati necessari per gestire l'app, perché il sistema operativo potrebbe cancellare questa risorsa di archiviazione.
string cacheDir = FileSystem.Current.CacheDirectory;
Directory dei dati dell'app
Per ottenere la directory di primo livello dell'app per tutti i file che non sono file di dati utente. Il backup di questi file viene eseguito con il framework di sincronizzazione del sistema operativo.
string mainDir = FileSystem.Current.AppDataDirectory;
File in bundle
Per aprire un file in bundle nel pacchetto dell'app, usare il OpenAppPackageFileAsync
metodo e passare il nome del file. Questo metodo restituisce un valore di sola Stream lettura che rappresenta il contenuto del file. Nell'esempio seguente viene illustrato l'uso di un metodo per leggere il contenuto di testo di un file:
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'esempio seguente illustra l'apertura di un file di tipo di carattere in bundle dal pacchetto dell'app:
await using var myFont = await FileSystem.OpenAppPackageFileAsync("MyFont.ttf");
Copiare un file in bundle nella cartella dei dati dell'app
Non è possibile modificare il file in bundle di un'app. È tuttavia possibile copiare un file in bundle nella directory della cache o nella directory dei dati dell'app. L'esempio seguente usa OpenAppPackageFileAsync
per copiare un file in bundle nella cartella dei dati dell'app:
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);
}
Differenze tra le piattaforme
Questa sezione descrive le differenze specifiche della piattaforma con gli helper del file system.
FileSystem.CacheDirectory
Restituisce l'oggetto CacheDir del contesto corrente.FileSystem.AppDataDirectory
Restituisce l'oggetto FilesDir del contesto corrente di cui viene eseguito il backup usando il backup automatico a partire dall'API 23 e versioni successive.FileSystem.OpenAppPackageFileAsync
I file aggiunti al progetto con l'azione di compilazione di MauiAsset possono essere aperti con questo metodo. I progetti MAUI .NET elaborano qualsiasi file nella cartella Resources\Raw come MauiAsset.Il
FileSystem.OpenPackageFileAsync
metodo non può ottenere la lunghezza del flusso in Android accedendo allaResult.Length
proprietà . È invece necessario leggere l'intero flusso e contare il numero di byte per ottenere le dimensioni dell'asset.