以下の行で:
//Folder.Attributes = FileAttributes.Directory | FileAttributes.Hidden | FileAttributes.System | FileAttributes.ReadOnly;
Folder.Attributes |= FileAttributes.Directory | FileAttributes.Hidden | FileAttributes.System | FileAttributes.ReadOnly;
Folder.Attributes |= ~FileAttributes.System;
Folder.Attributes &= ~FileAttributes.System;
|=
(単一のパイプが等しい)および&=
(単一アンパサンドが等しい)C#の平均
他を保持したままシステム属性を削除したい...
それらは 複合代入 演算子であり、翻訳(非常に大雑把に)
x |= y;
に
x = x | y;
&
についても同じです。暗黙的なキャストに関するいくつかのケースではもう少し詳細があり、ターゲット変数は一度だけ評価されますが、それは基本的にその要点です。
非複合演算子に関しては、 &
はビット単位の「AND」 であり、 |
はビット単位の「OR 「 。
編集:この場合、Folder.Attributes &= ~FileAttributes.System
が必要です。理由を理解するには:
~FileAttributes.System
は、「すべての属性exceptSystem
」(~
はビット単位のNOT)を意味します&
は、「結果はオペランドの両側にあるすべての属性である」ことを意味しますしたがって、基本的にはマスクとして機能します-onlyに現れる属性を保持します(「Systemを除くすべて」)。一般に:
|=
は、ターゲットにaddビットのみを追加します&=
は、ターゲットからremoveビットのみですa |= b
は、a
が1回だけ評価されることを除いて、a = a | b
と同等です。a &= b
は、a
が1回だけ評価されることを除いて、a = a & b
と同等です。
他のビットを変更せずにシステムビットを削除するには、使用します
Folder.Attributes &= ~FileAttributes.System;
~
はビットごとの否定です。したがって、システムビットを除くすべてのビットを1に設定します。 and
-マスクを使用すると、Systemが0に設定され、0 & x = 0
および1 & x = x
がx
であるため、他のすべてのビットはそのままになります。
他を保持したままシステム属性を削除したい。
次のようにこれを行うことができます:
Folder.Attributes ^= FileAttributes.System;