「Xamarin.Macで特殊ディレクトリのパスを取得する」の版間の差分

ページの作成:「== 実装:Environment.SpecialFolderを使う == Xamarin.MacでもEnvironmentクラスのGetFolderPathメソッドで色々と取得することもできる。 マ...」
 
編集の要約なし
 
(2人の利用者による、間の3版が非表示)
1行目: 1行目:
== 実装:Environment.SpecialFolderを使う ==
 
[[Xamarin.Mac]]に限らずあらゆる[[アプリ]]では、何かしらの[[データ]]を保存したりする場合には特殊ディレクトリを取得して、そこを起点にすることが基本となると思われる。
 
==実装:NSSearchPathクラスのGetDirectoriesメソッドを使う==
[[Windows]]ではEnvironmentクラスのGetFolderPathメソッドを使うとデスクトップやマイドキュメント、システムディレクトリなどの特殊ディレクトリの絶対パスを取得することができる。同様のことを[[Xamarin.Mac]]で行う場合にはNSSearchPathクラスのGetDirectoriesメソッドを使う。
 
NSSearchPathクラスのGetDirectoriesメソッドを使いユーザーディレクトリ配下の「Application Support」ディレクトリ(~/Library/Application Support)を取得するには以下のような感じになる。
<source lang="csharp">
var appSupportDir = NSSearchPath.GetDirectories(
    directory : NSSearchPathDirectory.ApplicationSupportDirectory,
    domainMask: NSSearchPathDomain.User
).FirstOrDefault();
</source>
 
NSSearchPathクラスのGetDirectoriesメソッドの[[戻り値]]は[[配列]]なので注意する必要がある。domainMask引数で取得範囲をユーザーディレクトリに限定しているので戻り値は1個しか返ってこないはずであり、[[LINQ]]でFirstOrDefaultしてしまうのが手っ取り早い。
 
===備考===
上記のApplication Supportディレクトリに[[データ]]を保存する場合はアプリごとにサブディレクトリを作って保存するのが望ましい。一部では企業名などでサブディレクトリを作っている事例も見かける。
 
アプリごとにサブディレクトリを作るのであれば、[[Xamarin]]のプロジェクトを作ると必ずある「Info.plist」の内容はNSBundleクラスで取得できるので、Preferencesディレクトリ風(NSUserDefaultsクラスで[[ググれ]])にBundle Identifierで区切ると良い感じかもしれない。
<source lang="csharp">
var appDataDir = System.IO.Path.Combine(
    appSupportDir,
    NSBundle.MainBundle.BundleIdentifier);
</source>
 
==実装:Environment.SpecialFolderを使う==
[[Xamarin.Mac]]でもEnvironmentクラスのGetFolderPathメソッドで色々と取得することもできる。
[[Xamarin.Mac]]でもEnvironmentクラスのGetFolderPathメソッドで色々と取得することもできる。
マルチプラットフォームでの互換性を考慮すると、EnvironmentクラスのGetFolderPathメソッドで取得可能な特殊ディレクトリであれば、環境依存のAPIよりもこちらを使うのが望ましいと思われる。
マルチプラットフォームでの互換性を考慮すると、EnvironmentクラスのGetFolderPathメソッドで取得可能な特殊ディレクトリであれば、環境依存のAPIよりもこちらを使うのが望ましいと思われる。
5行目: 31行目:
{|class="wikitable sortable"
{|class="wikitable sortable"
|+
|+
! Environment.SpecialFolder列挙体 !! Environment.GetFolderPathの戻り値
|-
|-
|-
| Desktop || /Users/{ユーザー}/Desktop
| Desktop || /Users/{ユーザー}/Desktop
103行目: 131行目:
ちなみに上記の列挙には以下のような[[ソースコード]]を用いた。
ちなみに上記の列挙には以下のような[[ソースコード]]を用いた。
<source lang="csharp">
<source lang="csharp">
            foreach (var folder in Enum.GetValues(typeof(Environment.SpecialFolder)))
foreach (var folder in Enum.GetValues(typeof(Environment.SpecialFolder)))
            {
{
                var path = Environment.GetFolderPath((Environment.SpecialFolder)folder);
    var path = Environment.GetFolderPath((Environment.SpecialFolder)folder);
                Console.WriteLine("{0} => {1}", folder, path);
    Console.WriteLine("{0} => {1}", folder, path);
            }
}
</source>
</source>


== 関連項目 ==
== 関連項目 ==
* [[Xamarin.Mac/特殊ディレクトリのパスを取得する]]
* [[Xamarin.Androidで特殊ディレクトリのパスを取得する]]
* [[Xamarin.Android/特殊ディレクトリのパスを取得する]]
* [[Xamarin.MacでNLogを使う]]
* [[Xamarin.Mac/NLogを使う]]
* [[Xamarin.Macでplistファイルを読み書きする]]
* [[Xamarin.Mac/plistファイルを読み書きする]]
 
== 参考文献 ==
{{reflist}}
 
{{stub}}


[[category:Xamarin.Mac]]
[[category:Xamarin.Mac]]