「MonoMac/特殊ディレクトリのパスを取得する」の版間の差分
編集の要約なし |
|||
| 1行目: | 1行目: | ||
[[ | ==概要== | ||
[[MonoMac]]や[[Xamarin.Mac]]に限らずあらゆるアプリでは、何かしらの[[データ]]を保存したりする場合には特殊ディレクトリを取得して、そこを起点にすることが基本となると思われる。 | |||
==実装:NSSearchPathクラスのGetDirectoriesメソッドを使う== | |||
[[Windows]]ではEnvironmentクラスのGetFolderPathメソッドを使うとデスクトップやマイドキュメント、システムディレクトリなどの特殊ディレクトリの絶対パスを取得することができる。同様のことを[[MonoMac]]および[[Xamarin.Mac]]で行う場合にはNSSearchPathクラスのGetDirectoriesメソッドを使う。 | |||
NSSearchPathクラスのGetDirectoriesメソッドを使いユーザーディレクトリ配下の「Application Support」ディレクトリ(~/Library/Application Support)を取得するには以下のような感じになる。 | |||
<source lang="csharp"> | <source lang="csharp"> | ||
var appSupportDir = NSSearchPath.GetDirectories( | var appSupportDir = NSSearchPath.GetDirectories( | ||
| 15行目: | 14行目: | ||
NSSearchPathクラスのGetDirectoriesメソッドの[[戻り値]]は[[配列]]なので注意する必要がある。domainMask引数で取得範囲をユーザーディレクトリに限定しているので戻り値は1個しか返ってこないはずであり、[[LINQ]]でFirstOrDefaultしてしまうのが手っ取り早い。 | NSSearchPathクラスのGetDirectoriesメソッドの[[戻り値]]は[[配列]]なので注意する必要がある。domainMask引数で取得範囲をユーザーディレクトリに限定しているので戻り値は1個しか返ってこないはずであり、[[LINQ]]でFirstOrDefaultしてしまうのが手っ取り早い。 | ||
=== | ===備考=== | ||
上記のApplication Supportディレクトリに[[データ]]を保存する場合はアプリごとにサブディレクトリを作って保存するのが望ましい。一部では企業名などでサブディレクトリを作っている事例も見かける。 | 上記のApplication Supportディレクトリに[[データ]]を保存する場合はアプリごとにサブディレクトリを作って保存するのが望ましい。一部では企業名などでサブディレクトリを作っている事例も見かける。 | ||
| 23行目: | 22行目: | ||
</source> | </source> | ||
== | |||
==実装:Environment.SpecialFolderを使う== | |||
[[MonoMac]]や[[Xamarin.Mac]]でもEnvironmentクラスのGetFolderPathメソッドで色々と取得することもできる。 | |||
マルチプラットフォームでの互換性を考慮するとEnvironmentクラスのGetFolderPathメソッドで取得可能な特殊ディレクトリであればこちらを使いのがベストだと思われる。 | |||
[[.NET Framework]]では標準的なEnvironment.SpecialFolderを使った場合に取得できる値を列挙する。 | [[.NET Framework]]では標準的なEnvironment.SpecialFolderを使った場合に取得できる値を列挙する。 | ||
以下は2015年2月時点での値なので将来的に未対応のものを中心に値が追加される可能性はある。 | |||
{|class="wikitable sortable" | {|class="wikitable sortable" | ||
|+ | |+ | ||
2015年10月15日 (木) 07:35時点における版
概要
MonoMacやXamarin.Macに限らずあらゆるアプリでは、何かしらのデータを保存したりする場合には特殊ディレクトリを取得して、そこを起点にすることが基本となると思われる。
実装:NSSearchPathクラスのGetDirectoriesメソッドを使う
WindowsではEnvironmentクラスのGetFolderPathメソッドを使うとデスクトップやマイドキュメント、システムディレクトリなどの特殊ディレクトリの絶対パスを取得することができる。同様のことをMonoMacおよびXamarin.Macで行う場合にはNSSearchPathクラスのGetDirectoriesメソッドを使う。
NSSearchPathクラスのGetDirectoriesメソッドを使いユーザーディレクトリ配下の「Application Support」ディレクトリ(~/Library/Application Support)を取得するには以下のような感じになる。
var appSupportDir = NSSearchPath.GetDirectories(
directory : NSSearchPathDirectory.ApplicationSupportDirectory,
domainMask: NSSearchPathDomain.User
).FirstOrDefault();
NSSearchPathクラスのGetDirectoriesメソッドの戻り値は配列なので注意する必要がある。domainMask引数で取得範囲をユーザーディレクトリに限定しているので戻り値は1個しか返ってこないはずであり、LINQでFirstOrDefaultしてしまうのが手っ取り早い。
備考
上記のApplication Supportディレクトリにデータを保存する場合はアプリごとにサブディレクトリを作って保存するのが望ましい。一部では企業名などでサブディレクトリを作っている事例も見かける。
アプリごとにサブディレクトリを作るのであれば、MonoMacのプロジェクトを作ると必ずある「Info.plist」の内容はNSBundleクラスで取得できるので、Preferencesディレクトリ風(NSUserDefaultsクラスでググれ)にBundle Identifierで区切ると良い感じかもしれない。
var appDataDir = System.IO.Path.Combine(appSupportDir, NSBundle.MainBundle.BundleIdentifier);
実装:Environment.SpecialFolderを使う
MonoMacやXamarin.MacでもEnvironmentクラスのGetFolderPathメソッドで色々と取得することもできる。 マルチプラットフォームでの互換性を考慮するとEnvironmentクラスのGetFolderPathメソッドで取得可能な特殊ディレクトリであればこちらを使いのがベストだと思われる。
.NET Frameworkでは標準的なEnvironment.SpecialFolderを使った場合に取得できる値を列挙する。 以下は2015年2月時点での値なので将来的に未対応のものを中心に値が追加される可能性はある。
| Environment.SpecialFolder列挙体 | Environment.GetFolderPathの戻り値 |
|---|---|
| AdminTools | 未対応、空文字が返ってくる |
| ApplicationData | /Users/monobook/.config |
| CDBurning | 未対応、空文字が返ってくる |
| CommonAdminTools | 未対応、空文字が返ってくる |
| CommonApplicationData | /usr/share |
| CommonDesktopDirectory | 未対応、空文字が返ってくる |
| CommonDocuments | 未対応、空文字が返ってくる |
| CommonMusic | 未対応、空文字が返ってくる |
| CommonOemLinks | 未対応、空文字が返ってくる |
| CommonPictures | 未対応、空文字が返ってくる |
| CommonProgramFiles | 未対応、空文字が返ってくる |
| CommonProgramFilesX86 | 未対応、空文字が返ってくる |
| CommonPrograms | 未対応、空文字が返ってくる |
| CommonStartMenu | 未対応、空文字が返ってくる |
| CommonStartup | 未対応、空文字が返ってくる |
| CommonTemplates | /usr/share/templates |
| CommonVideos | 未対応、空文字が返ってくる |
| Cookies | 未対応、空文字が返ってくる |
| Desktop | /Users/monobook/Desktop |
| DesktopDirectory | /Users/monobook/Desktop |
| Favorites | /Users/monobook/Library/Favorites |
| Fonts | /Users/monobook/Library/Fonts |
| History | 未対応、空文字が返ってくる |
| InternetCache | /Users/monobook/Library/Caches |
| LocalApplicationData | /Users/monobook/.local/share |
| LocalizedResources | 未対応、空文字が返ってくる |
| MyComputer | 未対応、空文字が返ってくる |
| MyDocuments | /Users/monobook |
| MyMusic | /Users/monobook/Music |
| MyPictures | /Users/monobook/Pictures |
| MyVideos | /Users/monobook/Videos |
| NetworkShortcuts | 未対応、空文字が返ってくる |
| PrinterShortcuts | 未対応、空文字が返ってくる |
| ProgramFiles | /Applications |
| ProgramFilesX86 | 未対応、空文字が返ってくる |
| Programs | 未対応、空文字が返ってくる |
| Recent | 未対応、空文字が返ってくる |
| Resources | 未対応、空文字が返ってくる |
| SendTo | 未対応、空文字が返ってくる |
| StartMenu | 未対応、空文字が返ってくる |
| Startup | 未対応、空文字が返ってくる |
| System | 未対応、空文字が返ってくる |
| SystemX86 | 未対応、空文字が返ってくる |
| Templates | /Users/monobook/Templates |
| UserProfile | /Users/monobook |
| Windows | 未対応、空文字が返ってくる |