DOBON.NET

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

EnvironmentクラスGetFolderPathメソッドを使うと、デスクトップ、お気に入り、スタートメニュー、システムディレクトリなどなどの特殊ディレクトリの絶対パスを取得することができます。

使い方は簡単で、取得したいディレクトリを表すEnvironment.SpecialFolder列挙体の値を指定するだけです。

VB.NET
コードを隠すコードを選択
'デスクトップ
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
C#
コードを隠すコードを選択
//デスクトップ
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
CDBurningCDへの書き込みを待機しているファイルのステージング領域のフォルダ(.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
CommonOemLinksOem 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
CommonProgramFilesX8664ビットシステムの共有コンポーネント(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
ProgramFilesProgram Filesフォルダ。32ビットアプリケーションではProgram Files(x86)フォルダとなる。C:\Program Files
ProgramFilesX8664ビットシステムの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
SystemX8664ビットシステムのウィンドウズシステム(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
WindowsWindowsディレクトリまたは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を指定すると、今まで通りです。

VB.NET
コードを隠すコードを選択
'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))
C#
コードを隠すコードを選択
//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));
  • 履歴:
  • 2007/1/25 .NET Framework 2.0に関する記述を追加。
  • 2013/6/29 「ディレクトリが存在しなくてもパスを取得する」を追加。.NET Framework 4.0で追加されたSpecialFolderを追記。具体例をWindows 7 64bitに変更。
  • 2016/5/29 アプリケーションが64bitか32bitで、CommonProgramFilesとProgramFilesのパスが変わるという説明を追加。

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • Windows Vista以降でUACが有効になっていると、ファイルへの書き込みに失敗する可能性があります。詳しくは、こちらをご覧ください。
  • .NET Tipsをご利用いただく際は、注意事項をお守りください。
共有する

この記事への評価

この記事へのコメント

この記事に関するコメントを投稿するには、下のボタンをクリックしてください。投稿フォームへ移動します。通常のご質問、ご意見等は掲示板へご投稿ください。