「MonoMac/特殊ディレクトリのパスを取得する」を編集中

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

警告: ログインしていません。編集を行うと、あなたの IP アドレスが公開されます。ログインまたはアカウントを作成すれば、あなたの編集はその利用者名とともに表示されるほか、その他の利点もあります。

この編集を取り消せます。 下記の差分を確認して、本当に取り消していいか検証してください。よろしければ変更を保存して取り消しを完了してください。

最新版 編集中の文章
1行目: 1行目:
#redirect [[Xamarin.Macで特殊ディレクトリのパスを取得する]]
+
==概要==
 +
[[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.Mac]]

MonoBookへの投稿はすべて、他の投稿者によって編集、変更、除去される場合があります。 自分が書いたものが他の人に容赦なく編集されるのを望まない場合は、ここに投稿しないでください。
また、投稿するのは、自分で書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください(詳細はMonoBook:著作権を参照)。 著作権保護されている作品は、許諾なしに投稿しないでください!

このページを編集するには、下記の確認用の質問に回答してください (詳細):

取り消し 編集の仕方 (新しいウィンドウで開きます)