.NET FrameworkのSystem.
- Desktop と DesktopDirectory – Life like a clown
結局のところ,この 2 つの値(を指定して GetFolderPath() を実行した結果)は以下のような振る舞いをするようです.
- DesktopDirectory は,現在の環境のデスクトップフォルダのパスを返す
- Desktop は,%USERPROFILE%\デスクトップ と言う値を返す.ただし,この値に相当するパス(, ジャンクション, etc?)が存在しない場合は空文字を返す.
Desktop を指定した時に返る値もどこかを設定すれば変更できそうな気はするのですが,今のところよく分かってません.デスクトップフォルダのパスを取得すると言うサンプルコードを探すと,結構な頻度で Desktop の方を指定したものが引っかかりますが,上記のような挙動を考えると DesktopDirectory を指定する方が良さそうです.
私もSpecialFolder.
結局、DesktopとDesktopDirectoryの違いは、Windows APIの世界の話になります。
MSDNライブラリのEnvironment.SpecialFolder列挙体の解説にこんな記述があります。
特別なフォルダーの詳細については、CSIDL値のトピックを参照してください。
実は、Environment.SpecialFolderの各値はCSIDLの各定数と同じ値を持っているのです。そのため、CSIDL定数群の説明が当てはまると考えて良いと思います。
- CSIDL (Windows) – MSDN Library(日本語は私訳)
- CSIDL_DESKTOP
- The virtual folder that represents the Windows desktop, the root of the namespace.
- Windowsのデスクトップ、名前空間のルートを表すフォルダ。
- CSIDL_DESKTOPDIRECTORY
- The file system directory used to physically store file objects on the desktop (not to be confused with the desktop folder itself). A typical path is C:\Documents and Settings\username\Desktop.
- デスクトップ上に置かれた物理的なファイルシステムオブジェクトを保管するために用いるファイルシステム上のディレクトリ。
Windowsのシェル(shell32.dll)の世界では、デスクトップを頂点(ルート)とする単一のツリー構造でファイル階層を表現しています。それをシェル名前空間と呼びます。ここでは、C:\などのディスクドライブのルートディレクトリもマイコンピュータに属するフォルダという扱いです。Windowsエクスプローラのフォルダツリーはまさにそれを表現しています。
この頂点たる「デスクトップ」を指すのがCSIDL_DESKTOP, SpecialFolder.
結論として、デスクトップフォルダのファイルパスを取得するという目的であれば、SpecialFolder.
そういえば、CSIDL_COMMON_DESKTOPDIRECTORY, SpecialFolder.
スポンサード リンク |