In below lines:
//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;
What does |= (single pipe equal) and &= (single ampersand equal) mean in C#?
I want to remove system attribute with keeping the others…
They’re compound assignment operators, translating (very loosely)
into
and the same for
&. There’s a bit more detail in a few cases regarding an implicit cast, and the target variable is only evaluated once, but that’s basically the gist of it.In terms of the non-compound operators,
&is a bitwise “AND” and|is a bitwise “OR”.EDIT: In this case you want
Folder.Attributes &= ~FileAttributes.System. To understand why:~FileAttributes.Systemmeans “all attributes exceptSystem” (~is a bitwise-NOT)&means “the result is all the attributes which occur on both sides of the operand”So it’s basically acting as a mask – only retain those attributes which appear in (“everything except System”). In general:
|=will only ever add bits to the target&=will only ever remove bits from the target