次の方法で共有


ファイル システム ヘルパー

サンプルを参照します。 サンプルを参照する

この記事では、.NET マルチプラットフォーム アプリ UI (.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();
}

次の例は、バンドルされているフォント ファイルをアプリ パッケージから開く方法を示しています。

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

バンドルされたファイルをアプリ データ フォルダーにコピーする

アプリのバンドルされたファイルを変更することはできません。 ただし、バンドルされたファイルを キャッシュ ディレクトリ または アプリ データ ディレクトリ にコピーできます。 次の例では、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 メソッドでは、Result.Length プロパティにアクセスして Android 上のストリームの長さを取得することはできません。 代わりに、アセットのサイズを取得するには、ストリーム全体を読み取り、バイト数をカウントする必要があります。