ファイルの属性チェックについて – プログラミング – Home

ファイルの属性チェックについて
 
通知
すべてクリア

[解決済] ファイルの属性チェックについて


ふぁいと!
 ふぁいと!
(@ふぁいと!)
ゲスト
結合: 23年前
投稿: 28
Topic starter  

環境
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
(@patio)
Famed Member
結合: 4年前
投稿: 2660
 

以下、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でエクスプローラーの表示項目に属性を加えて見てください。
ほとんどのファイルにアーカイブが付いているのがわかるはずです。
また、ファイル属性のアーカイブがどういう意味を持っているのか一度調べて見られることを
お勧めします。


返信引用
ふぁいと!
 ふぁいと!
(@ふぁいと!)
ゲスト
結合: 23年前
投稿: 28
Topic starter  

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


返信引用
wood
 wood
(@wood)
ゲスト
結合: 23年前
投稿: 895
 

Cドライブ直下にある「boot.ini」や「*.SYS」
なんか探してみると良いのではないですか

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

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

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


返信引用
ふぁいと!
 ふぁいと!
(@ふぁいと!)
ゲスト
結合: 23年前
投稿: 28
Topic starter  

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました