「MonoMac/特殊ディレクトリのパスを取得する」を編集中
ナビゲーションに移動
検索に移動
この編集を取り消せます。 下記の差分を確認して、本当に取り消していいか検証してください。よろしければ変更を保存して取り消しを完了してください。
最新版 | 編集中の文章 | ||
1行目: | 1行目: | ||
− | + | [[Windows]]ではEnvironmentクラスのGetFolderPathメソッドを使うと、デスクトップやマイドキュメント、システムディレクトリなどの特殊ディレクトリの絶対パスを取得することができる。 | |
+ | 同様のことを[[MonoMac]]で行う場合にはNSSearchPathクラスのGetDirectoriesメソッドを使う。 | ||
+ | |||
+ | ちなみにMonoMacでもEnvironmentクラスのGetFolderPathメソッドで色々取得することもできる。 | ||
+ | マルチプラットフォームでの互換性を考慮すると、可能であればEnvironmentクラスのGetFolderPathメソッドで取得できるものは取得しておいた方がいいかもしれない。 | ||
+ | |||
+ | ==方法1== | ||
+ | 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してしまうのが手っ取り早い。 | ||
+ | |||
+ | ===備考1=== | ||
+ | 上記のApplication Supportディレクトリに[[データ]]を保存する場合はアプリごとにサブディレクトリを作って保存するのが望ましい。一部では企業名などでサブディレクトリを作っている事例も見かける。 | ||
+ | |||
+ | アプリごとにサブディレクトリを作るのであれば、[[MonoMac]]のプロジェクトを作ると必ずある「Info.plist」の内容はNSBundleクラスで取得できるので、Preferencesディレクトリ風(NSUserDefaultsクラスで[[ググれ]])にBundle Identifierで区切ると良い感じかもしれない。 | ||
+ | <source lang="csharp"> | ||
+ | var appDataDir = Path.Combine(appSupportDir, NSBundle.MainBundle.BundleIdentifier); | ||
+ | </source> | ||
+ | |||
+ | ==関連項目== | ||
+ | |||
+ | ==参考文献== | ||
+ | {{reflist}} | ||
+ | |||
+ | {{stub}} | ||
+ | |||
+ | [[category:MonoMac]] |