Windowsには、標準で作られるフォルダーがある。たとえば「デスクトップ」や「ピクチャ」といったものだ。これらは「既知のフォルダ」(Known Folders)と呼ばれている。既知のフォルダには、ファイルシステム上のパスと対応するディレクトリ(通常フォルダー)もあれば、実体を持たない(あるいは複数のディレクトリから構成される)特殊なフォルダー(仮想フォルダー)もある。
「既知のフォルダ」のうち、ファイルシステム上のパスを持つディレクトリのいくつかは、パスを変更することが可能だ。前述のドキュメントやピクチャは、プロパティの「場所」タブで、移動させることができる。
また、OneDriveなどのWindowsの機能により、既知のフォルダの場所を変更することがある。つまり、既知のフォルダのパスには、既定値はあるものの、マシンやユーザーごとに異なる可能性がある。このため、既知のフォルダにアクセスする場合、現在の環境におけるパスを取得する必要がある。
そもそも「既知のフォルダ」とは?
既知のフォルダに関しては、以前にこの連載でも扱っている。Windows 10 RS5(October 2018 Update)で発生したフォルダ消失のトラブルに関してだ。このトラブルの原因が「既知のフォルダ」だった(「Windows 10「October 2018 Update」でファイル消失の原因になったKnown Foldersって何?」)。
Windowsでは、以前から標準のフォルダ構成がある。たとえば、Windowsは「C:\Windows」にインストールされ、プログラムは「C:\Program Folders」といった具合だ。しかし、こうした標準フォルダは、Windowsのバージョンやエディション、種類(クライアントかサーバーか)で異なるケースもある。最初は環境変数の初期値で実際の場所を示していた。当時は、すべての標準フォルダがファイルシステム上のディレクトリとして存在していたからである。
しかし、Windows 95(1995年)/Windows NT 4.0(1996年)で、CSIDL(Constant Special item ID List)が導入された。理由の1つとしては、標準フォルダ構成がWindowsのバージョンなどで異なり、その数が増えてしまったこと(当時のWindowsはサービス終了期限が定められていなかった)。
もう1つは、Windows 95でフォルダが導入されて、ディレクトリと特殊フォルダ(仮想フォルダ)が存在するようになったため、ファイルシステム上にユニークなパスを持たないフォルダができたからだ。たとえば、「ゴミ箱」は特殊なフォルダであり、ユーザーがエクスプローラーから見るものと、実際のディレクトリ内容(コマンドラインで表示されるもの)が異なっている。
CSIDLでは、定数を使って標準フォルダからのパスを取得し、これを使ってフォルダにアクセスする。CSIDLには、パスを持たない特殊フォルダがあるが、そのパスを取得することはできず、専用のAPIなどを使ってアクセスする。
Windows Vista(2006年)では、CSIDLに代わって「既知のフォルダ」(Known Folders)という仕組みが導入され、CSIDLによるアクセスは既知のフォルダの機能を使って実現されるようになった。ただ、互換性のため、現在でもCSIDLによるアクセスは可能である。
既知のフォルダが扱う対象のリストは、以下にある。
●KNOWNFOLDERID (Knownfolders.h) - Win32 apps
https://learn.microsoft.com/ja-jp/windows/win32/shell/knownfolderid
また、アプリケーションが独自の「既知のフォルダ」を作成することもできる。プログラムを使って、内容をエクスプローラーに表示する特殊フォルダを既知のフォルダとすることで、標準フォルダと同じ方法で移動などをさせることが可能になる。
「既知のフォルダ」では、対象をGUIDで指定する。しかし、この方法は面倒であり、いまだにCSIDL定数によるアクセスが使われることが多い。というのも、上記のKNOWNFOLDERIDのうち、ファイルシステム上のパスに割り当てられているもののほとんどがCSIDLにも存在していたものだからだ。これは、対象をCSIDLの定数で指定するのみで、実際の処理は、.NETもしくは.NET Frameworkのオブジェクトがするため、将来的なAPIの変更には影響されない(はずである)。
この連載の記事
-
第460回
PC
Windowsでsftpを使う -
第459回
PC
WSL 2.4.4ではtar形式でのディストリビューションが配布でき、企業での利用が容易になってきた -
第458回
PC
Windows上でhostsファイルを活用する -
第457回
PC
IPv6アドレスは先頭を見ればどんな種類かわかる -
第456回
PC
あらためてIPv6基本のキ -
第455回
PC
Windowsで現在どのネットワークアダプタがインターネット接続に使われているかを調べる方法 -
第454回
PC
Windows 11 24H2では「デバイスの暗号化」の条件が変わり、より多くのPCでドライブが暗号化される -
第453回
PC
Windows 11 24H2の配布開始後もすぐにはやってこない Windows UpdateとSafeguard Holds -
第452回
PC
Windows 11 Ver.24H2が登場 Copilot+ PCとそうでないPCで実質Windowsが2つに分かれる -
第451回
PC
新しいWindowsサンドボックスではコマンドラインからの制御が可能に -
第450回
PC
ユニコードで文字数を数える方法 - この連載の一覧へ