Helpers voor bestandssysteem

Voorbeeld bekijken. Het voorbeeld bekijken.

In dit artikel wordt beschreven hoe u de interface voor .NET Multi-Platform App UI (.NET MAUI) IFileSystem kunt gebruiken. Deze interface biedt helpermethoden voor toegang tot de cache en gegevensmappen van de app en helpt toegang te krijgen tot bestanden in het app-pakket.

De standaard implementatie van de IFileSystem interface is beschikbaar via de FileSystem.Current eigenschap. Zowel de IFileSystem interface als FileSystem de klasse bevinden zich in de Microsoft.Maui.Storage naamruimte.

Helpers voor bestandssysteem gebruiken

Elk besturingssysteem heeft unieke paden naar de app-cache en app-gegevensmappen. De IFileSystem interface biedt een platformoverschrijdende API voor toegang tot deze mappaden.

Cachemapdirectory

De map van de toepassing ophalen om cachegegevens op te slaan. Cachegegevens kunnen worden gebruikt voor alle gegevens die langer moeten worden bewaard dan tijdelijke gegevens, maar mogen geen gegevens zijn die nodig zijn om de app te gebruiken, omdat het besturingssysteem deze opslag mogelijk wist.

string cacheDir = FileSystem.Current.CacheDirectory;

App-gegevensmap

Om de bovenliggende map van de app te vinden voor bestanden die geen gebruikersbestanden zijn. Er wordt een back-up van deze bestanden gemaakt met het synchronisatieframework van het besturingssysteem.

string mainDir = FileSystem.Current.AppDataDirectory;

Gebundelde bestanden

Als u een bestand wilt openen dat is gebundeld in het app-pakket, gebruikt u de OpenAppPackageFileAsync methode en geeft u de bestandsnaam door. Deze methode geeft een alleen-lezen Stream terug die de bestandsinhoud vertegenwoordigt. In het volgende voorbeeld ziet u hoe u de tekstinhoud van een bestand kunt lezen met behulp van een methode:

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

In het volgende voorbeeld ziet u hoe u een gebundeld lettertypebestand opent vanuit het app-pakket:

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

Een gebundeld bestand kopiëren naar de map met app-gegevens

U kunt het gebundelde bestand van een app niet wijzigen. Maar u kunt een gebundeld bestand kopiëren naar de cachemap of app-gegevensmap. In het volgende voorbeeld wordt een OpenAppPackageFileAsync gebundeld bestand gekopieerd naar de map met app-gegevens:

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

Platformverschillen

In deze sectie worden de platformspecifieke verschillen met de helpers van het bestandssysteem beschreven.

  • FileSystem.CacheDirectory
    Geeft de CacheDir van de huidige context terug.

  • FileSystem.AppDataDirectory
    Retourneert de FilesDir van de huidige context, waarvan een back-up wordt gemaakt met Auto Backup vanaf API 23 of hoger.

  • FileSystem.OpenAppPackageFileAsync
    Bestanden die zijn toegevoegd aan het project met de Build Action of MauiAsset kunnen met deze methode worden geopend. .NET MAUI-projecten verwerken elk bestand in de map Resources\Raw als een MauiAsset.

    De FileSystem.OpenPackageFileAsync methode kan de lengte van de stream op Android niet ophalen door toegang te krijgen tot de Result.Length eigenschap. In plaats daarvan moet u de hele stream lezen en tellen hoeveel bytes er zijn om de grootte van de asset op te halen.