2008-12-01 66 views
3

我的功能幾乎是一個標準的搜索功能......我已經包含在下面。在.net(c#)中檢查重新分析點的最佳方法是什麼?

在函數中我有1行代碼負責清除Repart NTFS點。

if (attributes.ToString().IndexOf("ReparsePoint") == -1) 

問題是我現在得到一個錯誤 Access to the path 'c:\System Volume Information' is denied.

我調試的代碼,並在運行時該目錄的唯一屬性是:

System.IO.FileAttributes.Hidden 
| System.IO.FileAttributes.System 
| System.IO.FileAttributes.Directory 

我這個執行代碼在Windows 2008服務器上,任何想法我能做些什麼來治癒這個失敗?

public void DirSearch(string sDir) 
{ 
    foreach (string d in Directory.GetDirectories(sDir)) 
    { 
     DirectoryInfo dInfo = new DirectoryInfo(d); 
     FileAttributes attributes = dInfo.Attributes; 
     if (attributes.ToString().IndexOf("ReparsePoint") == -1) 
     { 
      foreach (string f in Directory.GetFiles(d, searchString)) 
      { 
       //lstFilesFound.Items.Add(f); 
       ListViewItem lvi; 
       ListViewItem.ListViewSubItem lvsi; 
       lvi = new ListViewItem(); 
       lvi.Text = f; 
       lvi.ImageIndex = 1; 
       lvi.Tag = "tag"; 
       lvsi = new ListViewItem.ListViewSubItem(); 
       lvsi.Text = "sub bugger"; 
       lvi.SubItems.Add(lvsi); 

       lvsi = new ListViewItem.ListViewSubItem(); 
       lvsi.Text = d;//"C:\\Users\\Administrator\\Downloads\\MediaMonkey.GOLD.EDITION.v.3.0.2.1134.[Darkside].[Demonoid].[Grim.Reaper]"; 
       lvi.SubItems.Add(lvsi); 

       listView1.Items.Add(lvi); 
      } 
      DirSearch(d); 
     } 
    } 
} 

回答

3

沒有人有權訪問除SYSTEM帳戶的System Volume Information。所以要麼改變目錄的權限。或者更好,趕上例外並繼續。

15

我不知道答案的問題是什麼,但改變你的屬性檢查使用正確的位操作!

if (attributes.ToString().IndexOf("ReparsePoint") == -1) 

...得多正確地寫爲...

if ((attributes & FileAttributes.ReparsePoint) == 0) 
+0

這是一個很棒的提示,感謝分享 – 2008-12-01 22:11:39

+8

或者從.NET 4開始,if(attributes.HasFlag(FileAttributes.ReparsePoint))。 – 2011-12-17 17:31:32

相關問題