MonoMac/特殊ディレクトリのパスを取得する

提供: MonoBook
< MonoMac
2015年2月5日 (木) 09:04時点における153.220.18.74 (トーク)による版 (ページの作成:「WindowsではEnvironmentクラスのGetFolderPathメソッドを使うと、デスクトップやマイドキュメント、システムディレクトリなどの特殊...」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

WindowsではEnvironmentクラスのGetFolderPathメソッドを使うと、デスクトップやマイドキュメント、システムディレクトリなどの特殊ディレクトリの絶対パスを取得することができる。 同様のことをMonoMacで行う場合にはNSSearchPathクラスのGetDirectoriesメソッドを使う。

方法1

ユーザーディレクトリ配下の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);

関連項目

参考文献