本日は晴天なり。とても暑いです。
さて、唐突ではございますが、ここでは VC++ において、ファイルとディレクトリを区別するサンプルコードを掲載しています。
スポンサーリンク
ファイル属性の取得と判定(ファイル・ディレクトリ・読み取り専用)
ファイルの属性を取得して、ファイルなのかディレクトリなのかを判定するサンプルコードです。また、ファイルが読み取り専用であるかも判断しています。詳細はコメントを参照ください。
CFileStatus Status;
BOOL ret = CFile::GetStatus( _T("sample.dat"), Status );
if ( ret == FALSE )
{
// ファイルが存在しないなど、ステータスの取得に失敗
}
if ( Status.m_attribute & CFile::directory ) == CFile::directory )
{
// ディレクトリであるか判定
}
if ( Status.m_attribute & CFile::readOnly )
{
//読み取り専用ファイル
}
CFileStatus.m_attribute プロパティの一覧
サンプルコードでは、ファイル属性(m_attribute)から、ファイルとディレクトリの判定と、そのファイルが読み取り専用であるか否かを判定しましたが、その他のファイル属性については、下記の通りそれぞれ取得できます。
| プロパティ | 値 | 内容 |
|---|---|---|
| normal | 0x00 | ノーマルファイル |
| readOnly | 0x01 | 読み取り専用ファイル |
| hidden | 0x02 | 隠しファイル |
| system | 0x04 | システムファイル |
| volume | 0x08 | ボリュームファイル |
| directory | 0x10 | ディレクトリ |
| archive | 0x20 | アーカイブファイル |
CFileStatus で取得できるファイル情報一覧
上記のサンプルコードでは、m_attribute プロパティからファイル属性を取得しましたが、その他取得できるプロパティを下表にまとめます。
| 型 | プロパティ | 内容 |
|---|---|---|
| CTime | m_ctime | ファイルの作成日時 |
| CTime | m_mtime | 最終更新日時ファイル |
| CTime | m_atime | ファイルが読み取りのために最後にアクセスされた日時 |
| ULONGLONG | m_size | DIR コマンドによって報告されるファイルの論理サイズ(バイト) |
| BYTE | m_attribute | ファイルの属性 |
| Windowschar | m_szFullName[_MAX_PATH] | 絶対ファイル名 |