〜 ファイル 〜
ファイルの属性を取得 (要SHELL32.DLL)

HSPExt.DLLのfxaget命令同様の処理をAPI関数GetFileAttributesを利用して取得します。
尚、fxaget命令は9種の属性の組み合わせによる値となっていますが、
下記のモジュールでは14種の組み合わせとなります…といっても通常は利用されないと思いますが…。
FILE_ATTRIBUTE_READONLY0x0001書き込みや削除が行えない読取専用ファイル。
FILE_ATTRIBUTE_HIDDEN0x0002通常のディレクトリリスティングでは表示されない隠しファイル。
FILE_ATTRIBUTE_SYSTEM0x0004OSのシステムファイル。
FILE_ATTRIBUTE_DIRECTORY0x0010ディレクトリに関連している。
FILE_ATTRIBUTE_ARCHIVE0x0020バックアップや削除のためのマークとして使用するアーカイブファイル。
FILE_ATTRIBUTE_DEVICE0x0040予約済。
FILE_ATTRIBUTE_NORMAL0x0080特に属性を持たないファイル。
FILE_ATTRIBUTE_TEMPORARY0x0100必要がなくなった段階ですぐに削除すべき一時ファイル。
FILE_ATTRIBUTE_SPARSE_FILE0x0200未使用領域が多いか同じ値が長く続くスパースファイル。
FILE_ATTRIBUTE_REPARSE_POINT0x0400再解析ポイントが関連付けられているファイル。
FILE_ATTRIBUTE_COMPRESSED0x0800圧縮ファイル。
FILE_ATTRIBUTE_OFFLINE0x1000データがオフラインの記憶装置へ物理的に移動されたことを示すファイル。
FILE_ATTRIBUTE_NOT_CONTENT_INDEXED0x2000「インデックスサービス」の対象ではないファイル。(Windows2000〜)
FILE_ATTRIBUTE_ENCRYPTED0x4000暗号化ファイル。
尚、属性を持たないファイルと言うのは、インデックスサービスの対象でなければならないということです。 エクスプローラのファイルを右クリックしたときに出るプロパティの属性チェックと、 属性の詳細チェックが全て外れている状態は0x2000が該当し、無属性(0x0080)ではありません。 勘違いしないようにしてください。

getattribute 対象ファイル
対象ファイル属性値取得元ファイルのファイルパスを指定する。
尚、取得した属性値合計はシステム変数statに代入される。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
	ll_libload kernel, "Kernel32.dll"
	ll_getproc GetFileAttributesA, "GetFileAttributesA", kernel

#module
#deffunc getattribute str
	mref file, 32
	mref stt, 64
	ll_getptr file : ll_ret prm
	ll_callfunc prm, 1, GetFileAttributesA@
	ll_ret prm : stt = prm
	return
#global

	dim atr, 14
	sdim atrname, 16, 14
	atr = 0x0001, 0x0002, 0x0004, 0x0010, 0x0020, 0x0040, 0x0080, 0x0100, 0x0200, 0x0400, 0x0800, 0x1000, 0x2000, 0x4000
	atrname.0 = "読取専用", "隠し", "システム", "ディレクトリ", "アーカイブ", "予約済", "無"
	atrname.7 = "一時", "スパース", "再解析", "圧縮", "オフライン", "高速検索対象外", "暗号化"
	dialog "", 16, "属性取得対象のファイル"
	if stat {
		getattribute refstr 
		ha = stat
		str ha, 16 + 4 // 4桁の16進数に変換
		mes "属性合計値:0x" + ha
		repeat 14
			if atr.cnt & stat : mes "・" + atrname.cnt + "属性"
		loop
	}
	stop

属性値 = getattribute(対象ファイル)
属性値取得した属性値合計の受取先を指定する。
対象ファイル属性値取得元ファイルパスを指定する。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
#uselib "Kernel32.dll"
#cfunc global getattribute "GetFileAttributesA" str

	atr = 0x0001, 0x0002, 0x0004, 0x0010, 0x0020, 0x0040, 0x0080, 0x0100, 0x0200, 0x0400, 0x0800, 0x1000, 0x2000, 0x4000
	atrname.0 = "読取専用", "隠し", "システム", "ディレクトリ", "アーカイブ", "予約済", "無"
	atrname.7 = "一時", "スパース", "再解析", "圧縮", "オフライン", "高速検索対象外", "暗号化"
	dialog "", 16, "属性取得対象のファイル"
	if stat {
		total = getattribute(refstr)
		mes "属性合計値:" + strf("0x%04x", total)
		foreach atrname
			if atr.cnt & total : mes "・" + atrname.cnt + "属性"
		loop
	}