今回ご紹介させていただくこと
絶対ファイルパス参照のメリット
ご覧いただきありがとうございます.
MAUIで独自のファイルを作る時があると思います,そんな時どこにデータを保存しますか?
MAUIで操作できる範囲にある,複数のデバイス間で別々に設定せずとも使える絶対パスが用意できれば良いと思いませんか?
2つの出力方法
プラットフォーム間で共通して使えるローカルストレージの絶対ファイルパスの調べ方は,「FileSystem.AppDataDirectory」
「Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)」
の2種類あります.
2つの方法には若干の違いがあり,使い分けることが出来ると考えられます.
前提情報
調査方法
今回はインターネットを用いて絶対ファイルパスの表示方法を調査し,2種類の方法を見つけてきました.
この記事では,そのローカルストレージの絶対ファイルパスの調べ方を2つ紹介させていただきます.
環境
Mauiプロジェクト中のC#ファイル中で操作を行うものとします.
絶対パスの取得法
FileSystem.AppDataDirectoryによる方法
デバイス固有のローカルデータファイルの絶対パスは「FileSystem.AppDataDirectory」で取得することが出来ます.
string filePath = FileSystem.AppDataDirectory;
FileSystem.AppDataDirectoryは,
上のコード中のfilePathの値は,
Windowsだと「C:\Users\{ユーザ名}\AppData\Local」
Andoroidだと「[0:] /data/user/0/(com.companyname.作品名)/files」
が私の環境では出力されました.
Environment.SpecialFolder.LocalApplicationDataによる方法
以下の関数を使っても同様に絶対ファイルパスを得ることが出来ます.
string filePath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)
これを「FileSystem.AppDataDirectory」と比較すると,取得されるパスが,
Windowsで「C:\Users\{ユーザ名}\AppData\Local\Packages\{固有のコード}\LocalState」が出力され,AndoroidではFileSystemと同じパスが私の環境では出力されました.
2種の方法の比較
以上のようにファイルパスを得ることができるが,2つの方法には,若干の差のがあります.
パスが深く,アプリのものと分かり辛いため,一時的なファイル・ユーザに見られたくないファイル・極力変更されたくないファイルをEnvironment.SpecialFolder.LocalApplicationDataから作る.
一方で,ユーザに見せたいファイル・自分で確認したいファイルをFileSystem.AppDataDirectoryのパスから作るという使い分けがWindowsで出来ると私は考えます.
今回の調査で気になること
調査結果からの課題
今回の調査では,インターネットでいろいろなサイトを閲覧して行いました.
ファイルパスの調べ方については,他の方法も恐らく存在すると思われる.その点に関して,引き続き調査が必要であると私は感じました.
また,FileSystemとEnvironment.SpecialFolder.LocalApplicationDataの違いに関しても,表面的な差のみを述べてしまっているため,今後も深い調査が必要だろうと私は考えます.
参考
- microsoft「Environment.SpecialFolder 列挙型」<https://docs.microsoft.com/ja-jp/dotnet/api/system.environment.specialfolder?view=net-6.0>(2022/08/14)
- microsoft 「File system helpers」<https://docs.microsoft.com/en-us/dotnet/maui/platform-integration/storage/file-system-helpers?tabs=windows>(2022/08/14)