以下行:
//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 {中|=
(单管相等)和&=
(单&符号相等)是什么意思
我想删除系统属性并保留其他属性...
答案 0 :(得分:122)
他们是compound assignment运营商,翻译(非常松散)
x |= y;
到
x = x | y;
和&
相同。在一些关于隐式演员的案例中有更多的细节,目标变量只评估一次,但这基本上是它的要点。
就非复合运算符而言,&
is a bitwise "AND"和|
is a bitwise "OR"。
编辑:在这种情况下,您需要Folder.Attributes &= ~FileAttributes.System
。要理解原因:
~FileAttributes.System
表示“除 System
之外的所有属性”(~
是按位 - NOT)&
表示“结果是操作数两边都出现的所有属性”所以它基本上充当了一个掩码 - 只保留那些出现在(“除了系统之外的所有东西”)的属性。一般来说:
|=
只会将位添加到目标&=
只会从目标中移除位答案 1 :(得分:31)
a |= b
相当于a = a | b
,但a
仅评估一次
a &= b
相当于a = a & b
,但a
仅评估一次
要在不更改其他位的情况下删除系统位,请使用
Folder.Attributes &= ~FileAttributes.System;
~
是按位否定。因此,除了系统位之外,您将所有位设置为1。 and
- 使用掩码将系统设置为0并保留所有其他位完整,因为0 & x = 0
和1 & x = x
适用于任何x
答案 2 :(得分:3)
我想删除系统属性并保留其他属性。
你可以这样做:
Folder.Attributes ^= FileAttributes.System;