〜 ファイル 〜
ファイルの属性を変更 (要SHELL32.DLL)

HSPExt.DLLにあるfxaset命令のようなファイル属性設定処理を
API関数SetFileAttributesを利用して行います。
尚、fxaset命令は9種の属性の組み合わせによる値となっていますが、
下記のモジュールは8種の組み合わせとなります。

FILE_ATTRIBUTE_READONLY0x0001書き込みや削除が行えない読取専用ファイル。
FILE_ATTRIBUTE_HIDDEN0x0002通常のディレクトリリスティングでは表示されない隠しファイル。
FILE_ATTRIBUTE_SYSTEM0x0004OSのシステムファイル。
FILE_ATTRIBUTE_ARCHIVE0x0020バックアップや削除のためのマークとして使用するアーカイブファイル。
FILE_ATTRIBUTE_NORMAL0x0080特に属性を持たないファイル。
FILE_ATTRIBUTE_TEMPORARY0x0100必要がなくなった段階ですぐに削除すべき一時ファイル。
FILE_ATTRIBUTE_OFFLINE0x1000データがオフラインの記憶装置へ物理的に移動されたことを示すファイル。
FILE_ATTRIBUTE_NOT_CONTENT_INDEXED0x2000「インデックスサービス」の対象ではないファイル。(Windows2000〜)

SetFileAttributes関数はファイルからディレクトリへの変換が出来ません。 また、ファイルの圧縮設定を行うのは別のAPI関数により実現させてください。

setattribute 対象ファイル, 属性
対象ファイル属性を設定するファイルのパスを指定する。
尚、設定した結果、成功なら0、失敗なら1がシステム変数statに代入される。
属性属性値の合計を指定する。
尚、いずれも指定しなかった場合は無属性(0x0080)が適用される。

 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
30
31
32
33
34
35
36
37
38
39
40
41
42
	ll_libload kernel, "Kernel32.dll"
	ll_getproc SetFileAttributes, "SetFileAttributesA", kernel

#module
#deffunc setattribute str, int
	mref file, 32 : mref type, 1
	mref stt, 64
	ll_getptr file : ll_ret prm
	prm.1 = type
	ll_callfunc prm, 2, SetFileAttributes@
	ll_ret prm : stt = prm
	return
#global

	sdim file, 256
	sdim atrname, 16, 7
	atr = 0x0001, 0x0002, 0x0004, 0x0020, 0x0100, 0x1000, 0x2000
	atrname = "読取専用", "隠し", "システム", "アーカイブ", "一時", "オフライン", "高速検索対象外"
	pos  10, 10 : input file, 240, 20
	pos 250, 10 : button "読込", *load
	pos  10, 40 : button "設定", *change
	objsize 180, 20
	repeat 7
		pos 10, cnt * 30 + 80 : chkbox atrname.cnt + "属性", type.cnt
	loop
	stop

*load
	dialog "", 16, "属性を設定するファイル"
	if stat : objprm 0, refstr
	stop

*change
	i = 0
	repeat 7
		if type.cnt : i += atr.cnt
	loop
	if i = 0 : i = 0x0080 // 全てにチェックがないなら無属性(FILE_ATTRIBUTE_NORMAL)
	setattribute file, i
	if stat : s = "" : else : s = "に失敗"
	dialog "設定" + s + "しました"
	stop

setattribute 対象ファイル, 属性
対象ファイル属性を設定するファイルのパスを指定する。
尚、設定した結果、成功なら0、失敗なら1がシステム変数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
30
31
#uselib "Kernel32.dll"
#func global setattribute "SetFileAttributesA" sptr, int

	sdim file, 256
	atr = 0x0001, 0x0002, 0x0004, 0x0020, 0x0100, 0x1000, 0x2000
	atrname = "読取専用", "隠し", "システム", "アーカイブ", "一時", "オフライン", "高速検索対象外"
	syscolor 15 : boxf
	pos  10, 10 : input file, 240, 20
	pos 250, 10 : button gosub "読込", *load
	pos  10, 40 : button gosub "設定", *change
	objsize 150, 20
	foreach atr
		pos 10, cnt * 30 + 80 : chkbox atrname.cnt + "属性", type.cnt
	loop
	stop

*load
	dialog "", 16, "属性を設定するファイル"
	if stat : objprm 0, refstr
	return

*change
	i = 0
	foreach atr
		if type.cnt : i += atr.cnt
	loop
	if i = 0 : i = 0x0080 // 全てにチェックがないなら無属性(FILE_ATTRIBUTE_NORMAL)
	setattribute file, i
	if stat : s = "" : else : s = "に失敗"
	dialog "設定" + s + "しました"
	return