特殊フォルダのパスを取得する
SPECIAL
特殊フォルダ
Windows にはシステム等が特別な用途で使用する特殊フォルダが用意されています。
プログラムをインストールするフォルダや共有ファイルを格納するような、基本的には Windows をインストールした際に自動的に定まるフォルダなども特殊フォルダのひとつですけど、たとえばデスクトップやマイドキュメントフォルダはユーザごとに異なる内容になりますし、Windows のシステムフォルダはインストールの状況によっては場所が異なってきたりする特殊フォルダもあります。
このような特殊フォルダは、時にユーザによってカスタマイズされていることもあり、"ここに在るのが普通だから" という感じで取り扱ったりしていると、環境によっては上手く行かないなんていうことが多くなってくるかもしれません。
そのような特殊フォルダの実際のパスを簡単に取得する方法が .NET Framework に備わっていますので、ここではその方法を記してみようと思います。
特殊フォルダの実際のパスを取得する
特殊フォルダのパスを取得するためには System.Environment.GetFolderPath メソッドを利用します。
引数に特殊フォルダを意味する Environment.SpecialFolder 列挙子を指定してあげることによって、それが示す実際のフォルダパスを取得することができるようになっています。もしも実際のフォルダが存在しない場合には空文字列が返るそうです。また、そもそもサポートされていない特殊フォルダを指定した場合には System.ArgumentException 例外が発生するとのことでした。
たとえば "マイドキュメント" の実際のパスを取得したい場合には、次のような感じになります。
string path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
指定できる特殊フォルダ
引数に指定できる Environment.SpecialFolder 列挙子には、環境によっては使えないものもあるそうですが、とりあえず次のものが指定できるようになっているようです。
| ApplicationData | 現在のユーザに割り当てられた、アプリケーションの設定などを保存するためのフォルダです。たとえば "C:\Documents and Settings\USERNAME\Application Data" といった感じになります。 |
|---|---|
| CommonApplicationData | 全ユーザ共通の、アプリケーションの設定などを保存するためのフォルダです。たとえば "C:\Documents and Settings\All Users\Application Data" といった感じになります。 |
| CommonProgramFiles | プログラムが共有するコンポーネント用のフォルダです。たとえば "C:\Program Files\Common Files" といった感じになります。 |
| Cookies | インターネットブラウザの Cookie が保存されるフォルダです。たとえば "C:\Documents and Settings\USERNAME\Cookies" といった感じになります。 |
| Desktop | 論理的なデスクトップを意味するそうです。とりあえずこれを指定して GetFolderPath を実行してみても、実際の物理パスは取得できるようでした。 |
| DesktopDirectory | デスクトップに表示される内容が実際に保存されているフォルダです。たとえば "C:\Documents and Settings\USERNAME\デスクトップ" といった感じになります。 |
| Favorites | インターネットブラウザのお気に入りフォルダです。たとえば "C:\Documents and Settings\USERNAME\Favorites" といった感じになります。 |
| History | インターネットブラウザの閲覧履歴を保存するためのフォルダです。たとえば "C:\Documents and Settings\USERNAME\Local Settings\History" といった感じになります。 |
| InternetCache | インターネットブラウザの一時ファイルを保存するためのフォルダです。たとえば "C:\Documents and Settings\USERNAME\Local Settings\Temporary Internet Files" といった感じになります。 |
| LocalApplicationData | アプリケーションの設定などを保存しておくためのフォルダだそうです。たとえば "C:\Documents and Settings\USERNAME\Local Settings\Application Data" といった感じです。 |
| MyComputers | "マイコンピュータ" を意味する列挙子だそうです。マイコンピュータには物理的なパスというものが存在しないため、通常は空文字が返ってくるとのことでした。 |
| MyDocuments | 現在のユーザに割り当てられた "マイドキュメント" フォルダです。たとえば "C:\Documents and Settings\USERNAME\My Documents" といった感じになります。 |
| MyMusic | 現在のユーザに割り当てられた "マイミュージック" フォルダです。たとえば "C:\Documents and Settings\USERNAME\My Documents\My Music" といった感じになります。 |
| MyPictures | 現在のユーザに割り当てられた "マイピクチャ" フォルダです。たとえば "C:\Documents and Settings\USERNAME\My Documents\My Pictures" といった感じになります。 |
| Personal | ドキュメントを格納するフォルダを示すもののようです。少なくとも自分の環境では MyDocuments と同じパスが取得されました。 |
| ProgramFiles | プログラムをインストールするためのフォルダです。たとえば "C:\Program Files" といった感じになります。 |
| Programs | スタートメニューの すべてのプログラム の内容が保存されているフォルダです。たとえば "C:\Documents and Settings\USERNAME\スタート メニュー\プログラム" といった感じになります。 |
| Recent | 現在のユーザが最近使用したドキュメントを格納するためのフォルダです。たとえば "C:\Documents and Settings\USERNAME\Recent" といった感じになります。 |
| SendTo | 現在のユーザに割り当てられた "送る" メニュー項目に表示される内容を保存するためのフォルダです。たとえば "C:\Documents and Settings\USERNAME\SendTo" といった感じになります。 |
| StartMenu | 現在のユーザに割り当てられた "スタート" メニュー項目に表示される内容を保存するためのフォルダです。たとえば "C:\Documents and Settings\USERNAME\スタート メニュー" といった感じになります。 |
| Startup | 現在のユーザに割り当てられた "スタートアップ" 項目に表示される内容を保存するためのフォルダです。たとえば "C:\Documents and Settings\USERNAME\プログラム\スタートアップ" といった感じになります。 |
| System | Windows のシステムフォルダです。たとえば "C:\WINDOWS\System32" といった感じになります。 |
| Templates | ユーザ各自のテンプレートファイルを保存するためのフォルダです。たとえば "C:\Documents and Settings\tomohiro\Templates" といった感じになります。 |