「MonoMac/特殊ディレクトリのパスを取得する」の版間の差分
(ページの作成:「WindowsではEnvironmentクラスのGetFolderPathメソッドを使うと、デスクトップやマイドキュメント、システムディレクトリなどの特殊...」) |
|||
1行目: | 1行目: | ||
− | + | [[Windows]]ではEnvironmentクラスのGetFolderPathメソッドを使うと、デスクトップやマイドキュメント、システムディレクトリなどの特殊ディレクトリの絶対パスを取得することができる。 | |
− | + | 同様のことを[[MonoMac]]で行う場合にはNSSearchPathクラスのGetDirectoriesメソッドを使う。 | |
+ | |||
+ | ちなみにMonoMacでもEnvironmentクラスのGetFolderPathメソッドで色々取得することもできる。 | ||
+ | マルチプラットフォームでの互換性を考慮すると、可能であればEnvironmentクラスのGetFolderPathメソッドで取得できるものは取得しておいた方がいいかもしれない。 | ||
==方法1== | ==方法1== | ||
− | + | NSSearchPathクラスのGetDirectoriesメソッドを使い、ユーザーディレクトリ配下のApplication Supportディレクトリ(~/Library/Application Support)を取得するには以下のような感じになる。 | |
<source lang="csharp"> | <source lang="csharp"> | ||
var appSupportDir = NSSearchPath.GetDirectories( | var appSupportDir = NSSearchPath.GetDirectories( |
2015年2月5日 (木) 09:07時点における版
WindowsではEnvironmentクラスのGetFolderPathメソッドを使うと、デスクトップやマイドキュメント、システムディレクトリなどの特殊ディレクトリの絶対パスを取得することができる。 同様のことをMonoMacで行う場合にはNSSearchPathクラスのGetDirectoriesメソッドを使う。
ちなみにMonoMacでもEnvironmentクラスのGetFolderPathメソッドで色々取得することもできる。 マルチプラットフォームでの互換性を考慮すると、可能であればEnvironmentクラスのGetFolderPathメソッドで取得できるものは取得しておいた方がいいかもしれない。
方法1
NSSearchPathクラスのGetDirectoriesメソッドを使い、ユーザーディレクトリ配下のApplication Supportディレクトリ(~/Library/Application Support)を取得するには以下のような感じになる。
var appSupportDir = NSSearchPath.GetDirectories(
directory : NSSearchPathDirectory.ApplicationSupportDirectory,
domainMask: NSSearchPathDomain.User
).FirstOrDefault();
NSSearchPathクラスのGetDirectoriesメソッドの戻り値は配列なので注意する必要がある。domainMask引数で取得範囲をユーザーディレクトリに限定しているので戻り値は1個しか返ってこないはずであり、LINQでFirstOrDefaultしてしまうのが手っ取り早い。
備考1
上記のApplication Supportディレクトリにデータを保存する場合はアプリごとにサブディレクトリを作って保存するのが望ましい。一部では企業名などでサブディレクトリを作っている事例も見かける。
アプリごとにサブディレクトリを作るのであれば、MonoMacのプロジェクトを作ると必ずある「Info.plist」の内容はNSBundleクラスで取得できるので、Preferencesディレクトリ風(NSUserDefaultsクラスでググれ)にBundle Identifierで区切ると良い感じかもしれない。
var appDataDir = Path.Combine(appSupportDir, NSBundle.MainBundle.BundleIdentifier);