差分

ナビゲーションに移動 検索に移動

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

6,830 バイト除去, 2020年3月3日 (火) 05:03
==概要==#redirect [[MonoMac]]や[[Xamarin.Mac]]に限らずあらゆるアプリでは、何かしらの[[データ]]を保存したりする場合には特殊ディレクトリを取得して、そこを起点にすることが基本となると思われる。 ==実装:NSSearchPathクラスのGetDirectoriesメソッドを使う==[[Windows]]ではEnvironmentクラスのGetFolderPathメソッドを使うとデスクトップやマイドキュメント、システムディレクトリなどの特殊ディレクトリの絶対パスを取得することができる。同様のことを[[MonoMac]]および[[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ディレクトリに[[データ]]を保存する場合はアプリごとにサブディレクトリを作って保存するのが望ましい。一部では企業名などでサブディレクトリを作っている事例も見かける。 アプリごとにサブディレクトリを作るのであれば、[[MonoMac]]のプロジェクトを作ると必ずある「Info.plist」の内容はNSBundleクラスで取得できるので、Preferencesディレクトリ風(NSUserDefaultsクラスで[[ググれ]])にBundle Identifierで区切ると良い感じかもしれない。<source lang="csharp"> var appDataDir = System.IO.Path.Combine(appSupportDir, NSBundle.MainBundle.BundleIdentifier);</source>  ==実装:Environment.SpecialFolderを使う==[[MonoMac]]や[[Xamarin.Mac]]でもEnvironmentクラスのGetFolderPathメソッドで色々と取得することもできる。マルチプラットフォームでの互換性を考慮するとEnvironmentクラスのGetFolderPathメソッドで取得可能な特殊ディレクトリであればこちらを使いのがベストだと思われる。 [[.NET Framework]]では標準的なEnvironment.SpecialFolderを使った場合に取得できる値を列挙する。以下は2015年2月時点での値なので将来的に未対応のものを中心に値が追加される可能性はある。{|class="wikitable sortable"|+! Environment.SpecialFolder列挙体 !! Environment.GetFolderPathの戻り値|-| AdminTools || style="color:gray" | 未対応、空文字が返ってくる|-| ApplicationData || /Users/monobook/.config|-| CDBurning || style="color:gray" | 未対応、空文字が返ってくる|-| CommonAdminTools || style="color:gray" | 未対応、空文字が返ってくる|-| CommonApplicationData || /usr/share|-| CommonDesktopDirectory || style="color:gray" | 未対応、空文字が返ってくる|-| CommonDocuments || style="color:gray" | 未対応、空文字が返ってくる|-| CommonMusic || style="color:gray" | 未対応、空文字が返ってくる|-| CommonOemLinks || style="color:gray" | 未対応、空文字が返ってくる|-| CommonPictures || style="color:gray" | 未対応、空文字が返ってくる|-| CommonProgramFiles || style="color:gray" | 未対応、空文字が返ってくる|-| CommonProgramFilesX86 || style="color:gray" | 未対応、空文字が返ってくる|-| CommonPrograms || style="color:gray" | 未対応、空文字が返ってくる|-| CommonStartMenu || style="color:gray" | 未対応、空文字が返ってくる|-| CommonStartup || style="color:gray" | 未対応、空文字が返ってくる|-| CommonTemplates || /usr/share/templates|-| CommonVideos || style="color:gray" | 未対応、空文字が返ってくる|-| Cookies || style="color:gray" | 未対応、空文字が返ってくる|-| Desktop || /Users/monobook/Desktop|-| DesktopDirectory || /Users/monobook/Desktop|-| Favorites || /Users/monobook/Library/Favorites|-| Fonts || /Users/monobook/Library/Fonts|-| History || style="color:gray" | 未対応、空文字が返ってくる|-| InternetCache || /Users/monobook/Library/Caches|-| LocalApplicationData || /Users/monobook/.local/share|-| LocalizedResources || style="color:gray" | 未対応、空文字が返ってくる|-| MyComputer || style="color:gray" | 未対応、空文字が返ってくる|-| MyDocuments || /Users/monobook|-| MyMusic || /Users/monobook/Music|-| MyPictures || /Users/monobook/Pictures|-| MyVideos || /Users/monobook/Videos|-| NetworkShortcuts || style="color:gray" | 未対応、空文字が返ってくる|-| PrinterShortcuts || style="color:gray" | 未対応、空文字が返ってくる|-| ProgramFiles || /Applications|-| ProgramFilesX86 || style="color:gray" | 未対応、空文字が返ってくる|-| Programs || style="color:gray" | 未対応、空文字が返ってくる|-| Recent || style="color:gray" | 未対応、空文字が返ってくる|-| Resources || style="color:gray" | 未対応、空文字が返ってくる|-| SendTo || style="color:gray" | 未対応、空文字が返ってくる|-| StartMenu || style="color:gray" | 未対応、空文字が返ってくる|-| Startup || style="color:gray" | 未対応、空文字が返ってくる|-| System || style="color:gray" | 未対応、空文字が返ってくる|-| SystemX86 || style="color:gray" | 未対応、空文字が返ってくる|-| Templates || /Users/monobook/Templates|-| UserProfile || /Users/monobook|-| Windows || style="color:gray" | 未対応、空文字が返ってくる|} ちなみに上記の列挙には以下のような[[ソースコード]]を用いた。<source lang="csharp"> foreach (var folder in Enum.GetValues(typeof(Environment.SpecialFolder))) { var path = Environment.GetFolderPath((Environment.SpecialFolder)folder); Console.WriteLine("{0} => {1}", folder, path); }</source> == 関連項目 ==* [[Xamarin.Android/特殊ディレクトリのパスを取得する]]* [[Xamarin.Mac/NLogを使う]]* [[Xamarin.Mac/plistファイルを読み書きする]] == 参考文献 =={{reflist}} {{stub}} [[category:MonoMac]][[category:Xamarin.MacMacで特殊ディレクトリのパスを取得する]]

案内メニュー