属性の解除はGetAttr関数とSetAttr関数を使って行う
ファイルやフォルダの属性はSetAttr関数で設定することが出来ますが、SetAttr関数は解除も行うことが出来ます。
正確には解除というよりも属性を新しく付け直すことになります。
実際のプログラムでは一律に新しい属性を付けるというよりも、元の属性の一部を解除する形になることの方が多いと思われます。
その場合、事前に元の属性がなんなのかをGetAttr関数で調べておく必要があります。
以下では元の属性のうち、一部の属性のみを解除する方法を紹介します。
なお、GetAttr関数とSetAttr関数については以下をご参照ください。
「ファイルやフォルダの属性を調べる(GetAttr)」
「ファイルやフォルダの属性を設定する(SetAttr)」
属性を解除する手順
一部の属性を解除する場合の手順は以下のようになります。
- 現在の属性を取得する。
- 現在の属性に解除したい属性が含まれているか確認する
- 含まれている場合はXor演算子で解除する
- 解除後の属性をSetAttr関数で再設定する
以下にこの手順のコードを紹介します。
属性を解除するサンプルコード
上の手順の通りのコードです。
解除したい属性が1つの場合と複数の場合はコードが異なります。
1つの属性を解除するサンプル
11行目で解除したい属性が含まれているか確認し、13行目でそれを除去しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Sub DeleteAttr() Dim sFilePath Dim ret As VbFileAttribute sFilePath = "V:\test\b.txt" '// 現在の属性を取得 ret = GetAttr(sFilePath) '// 現在の属性に解除したい属性(vbReadOnly)が含まれている場合 If (ret And vbReadOnly) = vbReadOnly Then '// 属性を解除 ret = ret Xor vbReadOnly '// 属性を再設定 Call SetAttr(PathName:=sFilePath, Attributes:=ret) End If End Sub |
複数の属性を解除するサンプル
ほとんど上のコードと同じですが、11行目の解除したい複数の属性が括弧で囲まれていることと、13行目でXor演算子で解除する全ての属性を指定されている点が異なります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Sub DeleteAttrMulti() Dim sFilePath Dim ret As VbFileAttribute sFilePath = "V:\test\b.txt" '// 現在の属性を取得 ret = GetAttr(sFilePath) '// 現在の属性に解除したい属性が含まれている場合 If (ret And (vbReadOnly + vbHidden)) = vbReadOnly + vbHidden Then '// 属性を解除 ret = ret Xor vbReadOnly Xor vbHidden '// 属性を再設定 Call SetAttr(PathName:=sFilePath, Attributes:=ret) End If End Sub |