Вспомогательные службы файловой системы

Browse sample. Обзор примера

В этой статье описывается, как использовать интерфейс многоплатформенного приложения .NET (.NET MAUI). IFileSystem Этот интерфейс предоставляет вспомогательные методы, которые обращаются к кэшу и каталогам данных приложения и помогают получать доступ к файлам в пакете приложения.

Реализация интерфейса по умолчанию IFileSystem доступна через FileSystem.Current свойство. Интерфейс IFileSystem и FileSystem класс содержатся в Microsoft.Maui.Storage пространстве имен.

Использование вспомогательных средств файловой системы

Каждая операционная система будет иметь уникальные пути к каталогам данных кэша приложений и приложений. Интерфейс IFileSystem предоставляет кроссплатформенный API для доступа к этим путям каталога.

Каталог кэша

Чтобы получить каталог приложения для хранения кэшированных данных. Данные кэша можно использовать для любых данных, которые должны сохраняться дольше временных данных, но не должны быть данными, необходимыми для работы приложения, так как операционная система может очистить это хранилище.

string cacheDir = FileSystem.Current.CacheDirectory;

Каталог данных приложения

Чтобы получить каталог верхнего уровня приложения для любых файлов, которые не являются файлами данных пользователя. Эти файлы архивируются на платформе синхронизации операционной системы.

string mainDir = FileSystem.Current.AppDataDirectory;

Пакетные файлы

Чтобы открыть файл, упакованный в пакет приложения, используйте OpenAppPackageFileAsync метод и передайте имя файла. Этот метод возвращает только Stream для чтения содержимое файла. В следующем примере показано использование метода для чтения текстового содержимого файла:

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

Копирование пакета файла в папку данных приложения

Невозможно изменить пакетный файл приложения. Но вы можете скопировать пакетный файл в каталог кэша или каталог данных приложения. Следующий пример используется OpenAppPackageFileAsync для копирования пакетного файла в папку данных приложения:

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

Различия между платформами

В этом разделе описываются различия платформы с вспомогательными службами файловой системы.

  • FileSystem.CacheDirectory
    Возвращает CacheDir текущего контекста.

  • FileSystem.AppDataDirectory
    Возвращает файл FilesDir текущего контекста, который выполняет резервное копирование с помощью автоматического резервного копирования, начиная с API 23 и выше.

  • FileSystem.OpenAppPackageFileAsync
    Файлы, добавленные в проект с помощью действия сборки MauiAsset , можно открыть с помощью этого метода. Проекты .NET MAUI обрабатывают любой файл в папке Resources\Raw как MauiAsset.

    Метод FileSystem.OpenPackageFileAsync не может получить длину потока в Android путем доступа к свойству Result.Length . Вместо этого необходимо считывать весь поток и подсчитывать количество байтов, чтобы получить размер ресурса.