En dessous des lignes:
//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;
Qu'est-ce que |=
(tuyau unique égal) et &=
_ (simple esperluette égale) moyenne en C #
Je veux supprimer l'attribut système en conservant les autres ...
Ils sont affectation composée opérateurs, traduisant (très lâchement)
x |= y;
dans
x = x | y;
et pareil pour &
. Il existe un peu plus de détails dans quelques cas concernant un transtypage implicite, et la variable cible n'est évaluée qu'une fois, mais c'est l'essentiel.
En ce qui concerne les opérateurs non composés, &
est un "ET" au niveau des bits et |
est un "OU" au niveau des bits .
EDIT: Dans ce cas, vous voulez Folder.Attributes &= ~FileAttributes.System
. Pour comprendre pourquoi:
~FileAttributes.System
signifie "tous les attributs à l'exception de System
" (~
est un bitwise-NOT)&
signifie "le résultat est tous les attributs qui apparaissent des deux côtés de l'opérande"Donc, il agit essentiellement comme un masque - seulement conserve les attributs qui apparaissent dans ("tout sauf le système"). En général:
|=
ne fera que uniquement ajouter bits à la cible&=
enlèvera seulement bits de la cible|
est au niveau du bit o&
est au niveau des bits eta |= b
est équivalent à a = a | b
sauf que a
n’est évalué qu’une foisa &= b
est équivalent à a = a & b
sauf que a
n’est évalué qu’une fois
Pour supprimer le bit système sans changer les autres bits, utilisez
Folder.Attributes &= ~FileAttributes.System;
~
est une négation au niveau des bits. Vous définissez ainsi tous les bits sur 1 sauf le bit Système. and
- avec le masque mettra System à 0 et laissera tous les autres bits intacts car 0 & x = 0
et 1 & x = x
pour tout x
Je veux supprimer l'attribut système tout en conservant les autres ..
Vous pouvez faire ça comme ça:
Folder.Attributes ^= FileAttributes.System;