Win: ファイルの属性

Windows (とくに NTFS) でファイルやディレクトリに付けられる属性を、まとめてメモ。
全然検証してないし何の仕様書も調べてないので、メモっていうか落書きレベルだけど。

下記のページを参考にしつつ。

MSDN Library Online - FileAttributes 列挙体
http://msdn.microsoft.com/ja-jp/library/system.io.fileattributes(VS.85).aspx

読み取り専用

内容を変更されないようにする。
オンにすると、アプリケーションからファイルへ書き込もうとするとエラーになる。
読み取り専用属性は、attrib コマンドの +R/-R オプションを使ってオン・オフを変更することができる。

隠しファイル

一覧に表示されないようにする。
ファイルシステム側で隠してくれるわけではないので、アプリケーションで判定を行う必要がある。
エクスプローラでは、フォルダオプションの [ファイルとフォルダの表示] で [隠しファイルおよび隠しフォルダを表示しない] を選択すると非表示になる。同じ項目で [すべてのファイルとフォルダを表示する] を選択した場合は、一覧表示の際にアイコンの色が薄く表示される。
コマンドプロンプトから dir コマンドで一覧表示する際、隠しファイルは表示されない。隠しファイル (のみ) 表示したい場合は dir /ah を使う。
隠しファイル属性は、attrib コマンドの +H/-H オプションを使ってオン・オフを変更することができる。

アーカイブ

バックアップツールなどに対して「まだバックアップされていないファイル」であることを示す属性。
ファイルを新規作成した状態ではオンになっており、バックアップツールがバックアップをする際にオフにする。ファイルを変更すると自動で再度オンになる。
バックアップ以外では、例えばネットワーク上の共有フォルダにあるファイルを「オフラインで利用する」ように設定している場合、同期直後はオフ、変更するとオン、といった形でアーカイブ属性が使用されている。
アーカイブ属性は、attrib コマンドの +A/-A オプションを使ってオン・オフを変更することができる (Windows XP のヘルプによると、回復コンソール上では attrib コマンドでのアーカイブ属性変更はできない)。

インデックス

検索用のインデックスを生成するよう指示するための属性。
Indexing Service を使用していない場合は意味なし。

圧縮

NTFS の機能でファイルが圧縮されていることを示す属性。暗号化と同時にオンにすることはできない。
エクスプローラでは、フォルダオプションの [暗号化や圧縮された NTFS ファイルをカラーで表示する] を有効にすると、ファイル名が青で表示される。
いわゆる圧縮ファイル (zip や lzh) とはまったく関係ない。
圧縮属性は、compact /C コマンドで圧縮すればオンになり、compact /U コマンドで圧縮解除すればオフになる。

暗号化

NTFS の機能でファイルが暗号化されていることを示す属性。圧縮と同時にオンにすることはできない。
エクスプローラでは、フォルダオプションの [暗号化や圧縮された NTFS ファイルをカラーで表示する] を有効にすると、ファイル名が緑で表示される。

システムファイル

FileAttributes 列挙体のリファレンスによると、「このファイルはオペレーティング システムの一部です。またはオペレーティング システムが排他的に使用します」。
といっても、C:\WINDOWS 配下のバイナリに付いているというわけではなく、どちらかというとデータの側に付けられる属性っぽい。
例えば、Windows XP の場合、C:\Documents and Settings の下にあるディレクトリのうち、"Default User" や "LocalService" などにシステムファイル属性が付けられている。
ディレクトリにシステムファイル属性がついていると、dir コマンドで一覧表示する際に出力に含まれなくなるようだ。
また、エクスプローラでは、フォルダオプションの [ファイルとフォルダの表示] で [隠しファイルおよび隠しフォルダを表示しない] を選択すると非表示になる。
システムファイル属性は、attrib コマンドの +S/-S オプションを使ってオン・オフを変更することができる。

オフライン

なんだろこれ。
たぶん、共有フォルダ上のファイルを「オフラインで利用する」場合のキャッシュに付く属性かな、と思ったけど、試した限りはそうでもないみたい。

一時ファイル

アプリケーションが一時的に使用するファイルであることを示す。
FileAttributes 列挙体のリファレンスを読む限りだと、一時ファイルの場合はディスクへの書き込みが抑制されるようだ。

ディレクト

ディレクトリであることを示す。

リパースポイント

リパースポイントであることを示す。
リパースポイントNTFS に容易されたソフトリンクのための機構で、「ジャンクション」「シンボリックリンク」を実装するために使われている、らしい。
データさんによる下記の記事を参照。

blog - ジャンクションとシンボリックリンク
http://data.blogdns.net/blog/2008/03/junction-symbliclink.html

スパースファイル

スパースファイルであることを示す。
スパースファイルは「サイズはでかいけど、中身ほとんど 0x00 なんだよねー」というようなファイルを特別扱いするもの。実際にデータが書かれた部分だけをファイルシステムに格納するので、ディスク消費を抑えることができる。