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の変更には影響されない(はずである)。

この連載の記事
-
第508回
PC
Scalable Vector Graphics(SVG)そもそも何なのか? -
第507回
PC
Windows 11の「開発者モード」とは何か? -
第506回
PC
Windows 11は早くも来秋登場の26H2プレビューの準備が始まる -
第505回
PC
結構変化しているWindows 11のエクスプローラーの基本設定を見直す -
第504回
PC
新しいOutlookとOutlook Classic、そろそろ古いOutlookとExchangeの組み合わせは引退の頃合いか -
第503回
PC
機能が増えたこともあり、寄せ集めから統合化に進むWindowsの便利ツール「PowerToys」 -
第502回
PC
Windows 11でBluetoothのオーディオ新規格「Bluetooth LE Audio」を試す -
第501回
PC
Windows 11 Ver.25H2での変更点、新機能を整理する -
第500回
PC
Windows 11 Ver.25H2が完成した -
第499回
PC
Windowsでの致命的だが回復可能なエラーに備える手段を2つ紹介 -
第498回
PC
Windows Terminalの安定版V1.23が公開 設定UIが改良される - この連載の一覧へ











