Xamarin.Essentials 入門 - #3 ファイルシステムヘルパー
はじめに
Xamarin.Essentials のファイルシステムヘルパーについて記載します。この API を利用することで、アプリケーション固有のディレクトリの取得、アプリケーションにバンドルだれたファイルを開くことができます。
使ってみよう
使い方
Xamarin.Essentials のファイルシステムヘルパーの機能は、FileSystem
クラスで提供されており、以下のことができます。
アプリケーション固有のディレクトリは、以下のコードのように FileSystem
クラスのプロパティから取得することができます。
// キャッシュディレクトリの取得 var cacheDir = FileSystem.CacheDirectory; // アプリのデータディレクトリの取得 var mainDir = FileSystem.AppDataDirectory;
各プラットフォームで返されるディレクトリは、以下の通りです。
プラットフォーム | CacheDirectory | AppDataDirectory |
---|---|---|
iOS | Library/Caches ディレクトリ | Library ディレクトリ |
Android | Context の CacheDir) | Context の FilesDir) |
UWP | LocalCacheFolder ディレクトリ | LocalFolder ディレクトリ |
アプリケーションにバンドルされたファイル開く場合は、FileSystem.OpenAppPackageFileAsync
メソッドを利用します。
using (var stream = await FileSystem.OpenAppPackageFileAsync("template.txt"))) { using (var reader = new StreamReader(stream)) { var contents = await reader.ReadToEndAsync(); } }
補足説明:アプリケーションにファイルをバンドルする方法
iOS の場合
iOS プロジェクトの Resources フォルダにファイルを追加して、ビルドアクションを [BundleResource] に設定する必要があります。
Android の場合
Android プロジェクトの Assetsフォルダにファイルを追加して、ビルドアクションを [AndroidAsset] に設定する必要があります。
UWP の場合
UWP プロジェクトにファイルを追加して、ビルドアクションが [Content] に設定する必要があります。
読んでみよう
FileSystem のコードを読んで、プラットフォーム固有の処理を見ていきます。
iOS
ディレクトリの検索に、NSSearchPath.GetDirectories メソッドが利用されています。
NSSearchPath.GetDirectories に渡す引数として、NSSearchPathDirectory
列挙体を指定しています。これはアプリケーション内にある特定のディレクトリを表す列挙体です。
アプリケーションにバンドルされたファイルの読み込みには、アプリケーションのルートディレクトリを NSBundle.MainBundle.BundlePath
を利用して取得し、.NET の File.OpenRead() メソッドが利用されています。
Android
ディレクトリの取得は、Context の CacheDir, FilesDir のプロパティから取得しています。
ファイルの読み込みには、AssetManager の Open メソッドが利用されています。
UWP
ディレクトリの値は、 ApplicaitonData
クラスのプロパティを利用しています。ApplicaitonData.Current
でアプリケーションデータに関するオブジェクトを取得し、LocalCacheFolder
, LocalFolder
から取得されています。
ファイルの読み込みは、アプリケーションのルートディレクトリを Package
クラスの InstalledLocation
プロパティで取得し、IStorageFolder
インタフェースの OpenStreamForReadAsync
メソッドを利用してファイルを開いています。
まとめ
- Xamarin.Essentials のファイルシステムヘルパーでは、以下の機能が提供される
- ディレクトリの取得(キャッシュ、アプリデータ)
- バンドルされたファイルを開く
- 内部では、以下のネイティブ固有のAPI を利用している
- パスの取得
- バンドルされたファイルを開く