2009-08-17 15 views
23

mam tej pętli:Jak sprawdzić, czy katalog jest ukryty w C#?

foreach (DirectoryInfo dir in downloadedMessageInfo.GetDirectories()) 
     { 
      if (dir.Attributes != FileAttributes.Hidden) 
      { 
       dir.Delete(true); 
      } 
     } 

Jak mogę poprawnie pomija wszystkie ukryte katalogi?

Odpowiedz

28

W .NET 4.0 można zrobić:

dir.Attributes.HasFlag(FileAttributes.Hidden) 
+0

Metoda HasFlags() jest nowym dodatkiem do .NET 4. Jest znacznie łatwiejsza w użyciu niż stare porównanie bitowe. – dthrasher

15

Attributes jest wartością Flags, więc trzeba sprawdzić, czy zawiera ona FileAttributes.Hidden stosując porównanie bitowe, tak:

if ((dir.Attributes & FileAttributes.Hidden) == 0) 
+0

Jedynym problemem jest to, kiedy próbuję oceniać wyżej, to nadal przez przełęcze ... mimo, że katalog jest naprawdę ukryty –

+1

Niestety, pomyślał szukałeś _for_ ukrytych katalogów, a nie ich wyłączeniem. Naprawiono powyższy kod. – bdukes

36

zmienić jeśli oświadczenie:

if ((dir.Attributes & FileAttributes.Hidden) != FileAttributes.Hidden) 

Musisz użyj maski bitowej, ponieważ atrybut jest wymiarem flagi. Może mieć wiele wartości, więc ukryte foldery mogą być ukryte ORAZ inna flaga. Powyższa składnia sprawdzi to poprawnie.

2

Ten kod działa dla mnie w Vb.NET;

If (dir.Attributes.Tostring.Contains("Hidden") Then 
    ' File is hidden 
Else 
    ' File is not hidden 
EndIf 
Powiązane problemy