2009-08-17 31 views
23

我有這樣的循環:如何測試目錄是否隱藏在C#中?

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

我該如何正確跳過所有隱藏目錄?

回答

28

在.NET 4.0中,你可以這樣做:

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

HasFlags()方法是.NET 4的一個新增功能。它比舊的按位比較更易於使用。 – dthrasher 2010-10-12 20:55:35

15

AttributesFlags值,所以你需要檢查它是否包含FileAttributes.Hidden使用按位比較,像這樣:

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

唯一的問題是,當我嘗試評價上面,它仍然通過傳球......即使目錄中真隱 – 2009-08-17 16:29:49

+1

對不起,還以爲你看_for_隱藏目錄,不排除他們。修正上面的代碼。 – bdukes 2009-08-17 17:07:04

36

更改您的if語句:

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

您需要因爲屬性是一個標誌枚舉,所以使用位掩碼。它可以有多個值,所以隱藏的文件夾可能被隱藏而另一個標誌。上面的語法將正確地檢查這個。

2

此代碼對我的作品在VB.Net;

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