このページの本文へ

前へ 1 2 次へ

Windows Info 第377回

Windowsの「デスクトップ」や「ピクチャ」など、「既知のフォルダ(Known Folders)」を使う方法

2023年04月30日 10時00分更新

文● 塩田紳二 編集● ASCII

  • この記事をはてなブックマークに追加
  • 本文印刷

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

前へ 1 2 次へ

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

プレミアムPC試用レポート

ピックアップ

ASCII.jp RSS2.0 配信中

ASCII.jpメール デジタルMac/iPodマガジン