ファイルの属性チェックについて

[戻る]
ふぁいと! 2002/10/11(金) 14:06:53
環境
Win2000(SP3)
VC++6.0(SPなし)
MFC

いつもお世話になっております。
GetFileAttributesを使ってファイルの属性チェックをしているのですが
(やりたいことはNOMAL属性以外は全部エラー・・・としたかったんですが)
ファイルが存在しない場合や読取専用、隠しファイル以外の属性はみな
アーカイブファイルだと返ってしまいます。
ちなみにファイルは秀丸で作成したテキストファイルです。
以下はソースの一部です。どこか間違っている箇所がありましたら教えて
頂けないでしょうか?宜しくお願いします。

///////////////////////////////////////
DWORD        dwResult;
CString        strPath;
CString        strMsg;


// 指定されたファイルの属性を調べる
dwResult = GetFileAttributes(strPath);

// ファイルが存在しない場合
if (dwResult == -1){
   strMsg = "ファイルが存在しません";
   MessageBox(hWnd, strMsg, strTitle, MB_OK | MB_ICONWARNING);
   return FALSE;
}
// 属性なし
else if (dwResult & FILE_ATTRIBUTE_NORMAL){
    return TRUE;
}
// 読取専用
else if (dwResult & FILE_ATTRIBUTE_READONLY)
 
// アーカイブ
else if (dwResult & FILE_ATTRIBUTE_ARCHIVE)

// 隠し
else if (dwResult & FILE_ATTRIBUTE_HIDDEN)

// 圧縮
else if (dwResult & FILE_ATTRIBUTE_COMPRESSED)

// ディレクトリ
else if (dwResult & FILE_ATTRIBUTE_DIRECTORY)

// オフライン
else if (dwResult & FILE_ATTRIBUTE_OFFLINE)

// システムファイル
else if (dwResult & FILE_ATTRIBUTE_SYSTEM)

// テンポラリ
else if (dwResult & FILE_ATTRIBUTE_TEMPORARY)

////////////////////////////////////////////////////

PATIO 2002/10/11(金) 15:04:33
以下、WINNT.Hからの抜粋ですが、
これを見て何か気が付かないですか?

#define FILE_ATTRIBUTE_READONLY             0x00000001  
#define FILE_ATTRIBUTE_HIDDEN               0x00000002  
#define FILE_ATTRIBUTE_SYSTEM               0x00000004  
#define FILE_ATTRIBUTE_DIRECTORY            0x00000010  
#define FILE_ATTRIBUTE_ARCHIVE              0x00000020  
#define FILE_ATTRIBUTE_ENCRYPTED            0x00000040  
#define FILE_ATTRIBUTE_NORMAL               0x00000080  
#define FILE_ATTRIBUTE_TEMPORARY            0x00000100  

これらは全てビット指定になっているのでシステム上重なって設定されては不味いような物以外
は
同じファイルが複数の属性を持つことが可能だと言うことです。
例えば、FILE_ATTRIBUTE_READONLYとFILE_ATTRIBUTE_HIDDENは同時に設定可能ですよね。
あと加え言うならば、テキストエディタで作成したファイルなどは特にファイル属性を変えない
限り
アーカイブが付いています。
これは属性としてついているだけなので変更可能です。
一度、ご自分のPCでエクスプローラーの表示項目に属性を加えて見てください。
ほとんどのファイルにアーカイブが付いているのがわかるはずです。
また、ファイル属性のアーカイブがどういう意味を持っているのか一度調べて見られることを
お勧めします。

ふぁいと! 2002/10/12(土) 16:01:26
PATIOさんご回答ありがとうございます。
大分納得しました。
もう一つ質問なのですがこのGetFileAttributesでいうシステムファイル
(FILE_ATTRIBUTE_SYSTEM)とはなにを指すのでしょう?
CONFIG.SYSや\WINNT配下のファイルで試してみましたがビットのANDで1が
立つものが見つけられませんでした。
何度もすいませんが宜しくお願いします。

wood 2002/10/12(土) 16:38:45
Cドライブ直下にある「boot.ini」や「*.SYS」
なんか探してみると良いのではないですか

通常属性変更していなければ
boot.iniには リードオンリー 隠し属性、システム属性が着いている筈です
DOSコマンドで解除するには

C:\>attrib -R -H -S BOOT.INI
になり

DOSコマンドで設定するには
C:\>attrib +R +H +S BOOT.INI
になります

ふぁいと! 2002/10/15(火) 22:12:55
[[解決]]
woodさん遅くなりました。
ありがとうございます。
Win9X系やWinNT4.0(のファイルシステムがFAT16?)だとプロパティでシステムの
チェックボックスがあるのですね。(Win2000NTFS/FAT32はないですが)
とりあえず現状は拡張子の判断で十分なので解決とさせていただきます。
また宜しくお願いします。

古いスレッドには追加発言できません。