EnvironmentクラスのGetFolderPathメソッドを使うと、デスクトップ、お気に入り、スタートメニュー、システムディレクトリなどなどの特殊ディレクトリの絶対パスを取得することができます。
使い方は簡単で、取得したいディレクトリを表すEnvironment.SpecialFolder列挙体の値を指定するだけです。
'デスクトップ Console.WriteLine( _ System.Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory)) '結果: C:\Documents and Settings\UserName\デスクトップ 'お気に入り Console.WriteLine( _ System.Environment.GetFolderPath(Environment.SpecialFolder.Favorites)) '結果: C:\Documents and Settings\UserName\Favorites 'マイドキュメント Console.WriteLine( _ System.Environment.GetFolderPath(Environment.SpecialFolder.Personal)) '結果: C:\Documents and Settings\UserName\My Documents 'スタートメニュー Console.WriteLine( _ System.Environment.GetFolderPath(Environment.SpecialFolder.StartMenu)) '結果: C:\Documents and Settings\UserName\スタート メニュー 'ウィンドウズシステムフォルダ 'System.Environment.SystemDirectoryでも可 Console.WriteLine( _ System.Environment.GetFolderPath(Environment.SpecialFolder.System)) '結果: C:\WINDOWS\System32
//デスクトップ Console.WriteLine( System.Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory)); //結果: C:\Documents and Settings\UserName\デスクトップ //お気に入り Console.WriteLine( System.Environment.GetFolderPath(Environment.SpecialFolder.Favorites)); //結果: C:\Documents and Settings\UserName\Favorites //マイドキュメント Console.WriteLine( System.Environment.GetFolderPath(Environment.SpecialFolder.Personal)); //結果: C:\Documents and Settings\UserName\My Documents //スタートメニュー Console.WriteLine( System.Environment.GetFolderPath(Environment.SpecialFolder.StartMenu)); //結果: C:\Documents and Settings\UserName\スタート メニュー //ウィンドウズシステムフォルダ //System.Environment.SystemDirectoryでも可 Console.WriteLine( System.Environment.GetFolderPath(Environment.SpecialFolder.System)); //結果: C:\WINDOWS\System32
Environment.SpecialFolder列挙体のメンバを表にすると、以下のようになります。表の「具体例」は、64bitのWindows 7上で64bitアプリケーション(プロジェクトのプロパティで、[ビルド]-[32ビットの優先]がオフ)を実行した時の例です。
Environment.SpecialFolder列挙体のメンバ | 説明 | 具体例(Windows 7 64bit) |
---|---|---|
AdminTools | ユーザーの管理ツールフォルダ(.NET Framework 4.0以降) | C:\Users\UserName\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Administrative Tools |
ApplicationData | 現在のローミングユーザーのApplication Dataフォルダ | C:\Users\UserName\AppData\Roaming |
CDBurning | CDへの書き込みを待機しているファイルのステージング領域のフォルダ(.NET Framework 4.0以降) | C:\Users\UserName\AppData\Local\Microsoft\Windows\Burn\Burn |
CommonAdminTools | すべてのユーザーの管理ツールフォルダ(.NET Framework 4.0以降) | C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Administrative Tools |
CommonApplicationData | すべてのユーザーのApplication Dataフォルダ | C:\ProgramData |
CommonDesktopDirectory | パブリックのデスクトップフォルダ(.NET Framework 4.0以降) | C:\Users\Public\Desktop |
CommonDocuments | パブリックのドキュメントフォルダ(.NET Framework 4.0以降) | C:\Users\Public\Documents |
CommonMusic | パブリックのミュージックフォルダ(.NET Framework 4.0以降) | C:\Users\Public\Music |
CommonOemLinks | Oem Linksフォルダ(.NET Framework 4.0以降) | C:\ProgramData\OEM Links |
CommonPictures | パブリックのイメージフォルダ(.NET Framework 4.0以降) | C:\Users\Public\Pictures |
CommonProgramFiles | 共有コンポーネントフォルダ。32ビットアプリケーションでは共有コンポーネント(x86)フォルダとなる。 | C:\Program Files\Common Files |
CommonProgramFilesX86 | 64ビットシステムの共有コンポーネント(x86)フォルダ。32ビットシステムではCommonProgramFilesと同じ。(.NET Framework 4.0以降) | C:\Program Files (x86)\Common Files |
CommonPrograms | すべてのユーザーの[スタート]メニューのプログラムフォルダ(.NET Framework 4.0以降) | C:\ProgramData\Microsoft\Windows\Start Menu\Programs |
CommonStartMenu | すべてのユーザーの[スタート]メニューフォルダ(.NET Framework 4.0以降) | C:\ProgramData\Microsoft\Windows\Start Menu |
CommonStartup | すべてのユーザーのスタートアップフォルダ(.NET Framework 4.0以降) | C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup |
CommonTemplates | すべてのユーザーのテンプレートフォルダ(.NET Framework 4.0以降) | C:\ProgramData\Microsoft\Windows\Templates |
CommonVideos | パブリックのビデオファイルフォルダ(.NET Framework 4.0以降) | C:\Users\Public\Videos |
Cookies | インターネットクッキーのフォルダ | C:\Users\UserName\AppData\Roaming\Microsoft\Windows\Cookies |
Desktop | デスクトップ(名前空間のルート)を示す仮想フォルダ(.NET Framework 1.1以降) | C:\Users\UserName\Desktop |
DesktopDirectory | 物理的なデスクトップ | C:\Users\UserName\Desktop |
Favorites | お気に入りフォルダ | C:\Users\UserName\Favorites |
Fonts | フォントの仮想フォルダ(.NET Framework 4.0以降) | C:\windows\Fonts |
History | インターネット履歴のフォルダ | C:\Users\UserName\AppData\Local\Microsoft\Windows\History |
InternetCache | 一時インターネットファイルのフォルダ | C:\Users\UserName\AppData\Local\Microsoft\Windows\Temporary Internet Files |
LocalApplicationData | ローカルApplication Dataフォルダ | C:\Users\UserName\AppData\Local |
LocalizedResources | ローカルリソースフォルダ(.NET Framework 4.0以降) | C:\windows\resources\0411 |
MyComputer | マイコンピュータ(.NET Framework 1.1以降) | |
MyDocuments | マイドキュメント(.NET Framework 2.0以降) | C:\Users\UserName\Documents |
MyMusic | マイミュージック(.NET Framework 1.1以降) | C:\Users\UserName\Music |
MyPictures | マイピクチャ(.NET Framework 1.1以降) | C:\Users\UserName\Pictures |
MyVideos | マイビデオ(.NET Framework 4.0以降) | C:\Users\UserName\Videos |
NetworkShortcuts | マイネットワークを示す仮想フォルダ(.NET Framework 4.0以降) | C:\Users\UserName\AppData\Roaming\Microsoft\Windows\Network Shortcuts |
Personal | マイドキュメント | C:\Users\UserName\Documents |
PrinterShortcuts | プリンターの仮想フォルダ(.NET Framework 4.0以降) | C:\Users\UserName\AppData\Roaming\Microsoft\Windows\Printer Shortcuts |
ProgramFiles | Program Filesフォルダ。32ビットアプリケーションではProgram Files(x86)フォルダとなる。 | C:\Program Files |
ProgramFilesX86 | 64ビットシステムのProgram Files(x86)フォルダ。32ビットシステムではProgramFilesと同じ。(.NET Framework 4.0以降) | C:\Program Files (x86) |
Programs | [スタート]メニューのプログラムフォルダ | C:\Users\UserName\AppData\Roaming\Microsoft\Windows\Start Menu\Programs |
Recent | 最近使用したドキュメントのフォルダ | C:\Users\UserName\AppData\Roaming\Microsoft\Windows\Recent |
Resources | リソースフォルダ(.NET Framework 4.0以降) | C:\windows\resources |
SendTo | [送る]フォルダ | C:\Users\UserName\AppData\Roaming\Microsoft\Windows\SendTo |
StartMenu | [スタート]メニューフォルダ | C:\Users\UserName\AppData\Roaming\Microsoft\Windows\Start Menu |
Startup | スタートアップフォルダ | C:\Users\UserName\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup |
System | ウィンドウズシステムフォルダ | C:\windows\system32 |
SystemX86 | 64ビットシステムのウィンドウズシステム(x86)フォルダ。32ビットシステムではSystemと同じ。(.NET Framework 4.0以降) | C:\windows\SysWOW64 |
Templates | テンプレートフォルダ | C:\Users\UserName\AppData\Roaming\Microsoft\Windows\Templates |
UserProfile | ユーザーのプロファイルフォルダ(.NET Framework 4.0以降) | C:\Users\UserName |
Windows | WindowsディレクトリまたはSYSROOT(.NET Framework 4.0以降) | C:\windows |
補足:システムディレクトリはEnvironment.SystemDirectoryプロパティでも取得できます。また、現在のディレクトリはEnvironment.CurrentDirectoryプロパティで取得します。Windowsディレクトリについては、「Windowsディレクトリを取得する」でも説明しています。一時ファイル名、一時ディレクトリ名の取得に関しては、「一時ファイル名、一時ディレクトリ名を取得する」をご覧ください。
補足:.NET Framework 2.0以降のVB.NETでは、My.Computer.FileSystem.SpecialDirectoriesのプロパティで特殊ディレクトリを取得することもできます。
.NET Framework 3.5までは、Environment.GetFolderPathメソッドは存在するディレクトリのパスしか返さず、存在しないと空の文字列を返しました。.NET Framework 4.0からは、2番目の引数にSpecialFolderOption列挙体の値を指定することで、存在しないパスでも返すようにできます。
SpecialFolderOption.DoNotVerifyを指定すると、ディレクトリの存在を確認せずにパスを返します。SpecialFolderOption.Createを指定すると、ディレクトリが存在しない場合はディレクトリを作成してパスを返します。SpecialFolderOption.Noneを指定すると、今まで通りです。
'CommonOemLinksフォルダが存在しない時は空の文字列を返す(既定) Console.WriteLine( _ Environment.GetFolderPath(Environment.SpecialFolder.CommonOemLinks, _ Environment.SpecialFolderOption.None)) 'CommonOemLinksフォルダが存在しなくてもパスを返す Console.WriteLine( _ Environment.GetFolderPath(Environment.SpecialFolder.CommonOemLinks, _ Environment.SpecialFolderOption.DoNotVerify)) 'CommonOemLinksフォルダが存在しない時は作成して、パスを返す Console.WriteLine( _ Environment.GetFolderPath(Environment.SpecialFolder.CommonOemLinks, _ Environment.SpecialFolderOption.Create))
//CommonOemLinksフォルダが存在しない時は空の文字列を返す(既定) Console.WriteLine( Environment.GetFolderPath(Environment.SpecialFolder.CommonOemLinks, Environment.SpecialFolderOption.None)); //CommonOemLinksフォルダが存在しなくてもパスを返す Console.WriteLine( Environment.GetFolderPath(Environment.SpecialFolder.CommonOemLinks, Environment.SpecialFolderOption.DoNotVerify)); //CommonOemLinksフォルダが存在しない時は作成して、パスを返す Console.WriteLine( Environment.GetFolderPath(Environment.SpecialFolder.CommonOemLinks, Environment.SpecialFolderOption.Create));