status()

ファイル情報を取得する関数status()を実装しました。
file_status.hppの差分
file_status.cpp
サンプル
typeのsparse_fileはやめて、attributesに移動しています。


http://en.wikipedia.org/wiki/NTFS
を見て、NTFSPOSIX互換の状態変更時間をサポートしていることを知り、Cygwinのstat()を確認したところ、確かにstat::st_ctimeに状態変更時間が入っていました。


Cygwinのソースを追ってみると、NtQueryInformationFile()というドキュメント化されていない関数に行き着きます。
これはDDKのntddk.hで宣言されているZwQueryInformationFile()とほぼ同じ関数のようで、その仕様を元に動的ロードして呼び出すように実装してみました。
Windows2000以降の関数なので、_WIN32_WINNTを0x0500以上にしてコンパイルした場合のみ有効になるようにしています。


POSIX用の実装は単純にstat()を呼んでいるだけです。