2011-12-14 91 views
3

我目前正在開發一個C#應用程序來搜索計算機中的文件。 GUI有兩個文本字段:一個用於輸入(要搜索的文件的名稱)和一個用於顯示文件路徑(如果找到)。C#計算機中的搜索文件

現在,問題是我的應用程序正在跳過我的邏輯C:驅動器。下面是一些代碼片段:

foreach (string s in Directory.GetLogicalDrives()) 
{ 
    if (list.Count == 0) 
    { 
     foreach (string f in Directory.GetFiles(s, file)) 
     { 
      textBox2.Text = f; 
      list.Add(f); 
     } 
     if (list.Count == 0) 
     { 
      search(s); 
     } 
    } 
} 

而且搜索方法:

private void search(string sDir) 
{ 
    try 
    { 
     foreach (string d in Directory.GetDirectories(sDir)) 
     { 
      if (list.Count == 0) 
      { 
       Console.WriteLine(d); 
       foreach (string f in Directory.GetFiles(d, file)) 
       { 
        textBox2.Text = f; 
        list.Add(f); 
       } 
       if (list.Count == 0) 
       { 
        search(d); 
       } 
      } 
     } 
    } 
    catch (System.Exception excpt) 
    { 
     Console.WriteLine(excpt.Message); 
    } 
} 

下面是一些輸出:

C:\$Recycle.Bin 
C:\$Recycle.Bin\S-1-5-21-1794489696-3002174507-1726058468-1000 
C:\Config.Msi 
C:\de cautat 
C:\de cautat\database 
C:\de cautat\fut_bot 
C:\de cautat\helper 
C:\de cautat\images 
C:\de cautat\itemiinfo 
C:\de cautat\JSONs 
C:\de cautat\JSONs\PLAYER 
C:\de cautat\JSONs\USER 
C:\de cautat\requests 
C:\Documents and Settings 
A first chance exception of type 'System.UnauthorizedAccessException' occurred in mscorlib.dll 
Access to the path 'C:\Documents and Settings' is denied. 
D:\$RECYCLE.BIN 
D:\$RECYCLE.BIN\S-1-5-21-1794489696-3002174507-1726058468-1000 
D:\$RECYCLE.BIN\S-1-5-21-2637989945-465084399-3498881169-1000 
etc 

誰能幫助我,告訴accesing時是什麼問題那些文件夾?謝謝!

注意:我在Windows 7 x64(.NET Framework 2.0)上使用Microsoft Visual Studio 2010。

+0

權限問題。應用程序正在運行的帳戶沒有權限瀏覽這些文件夾。 – Oded 2011-12-14 21:31:33

回答

2

將您嘗試捕捉到的foreach(字符串d在Directory.GetDirectories(SDIR))循環,因此繼續在錯誤的過程。

+0

謝謝!這就是問題 – 2011-12-14 21:38:01

3

問題是你正在打一個你沒有閱讀權限的文件夾。您需要以管理員身份運行程序或需要讓它跳過您沒有讀取權限的文件和文件夾。使用Directory.EnumerateFiles可以讓你簡化你的代碼,它不應該嘗試打開它沒有閱讀權限的文件夾。

foreach (string s in Directory.GetLogicalDrives()) 
{ 
    if (list.Count == 0) 
    { 
     foreach (string f in Directory.EnumerateFiles(s, file, SerchOption.AllDirectories)) 
     { 
      try 
      { 
       textBox2.Text = f; 
       list.Add(f); 
      } 
      catch (System.Exception excpt) 
      { 
       Console.WriteLine(excpt.Message); 
      } 

     } 
    } 
} 
+0

我已經構建了該應用的發佈版本並以管理員身份運行。仍然是同樣的問題。 :( – 2011-12-14 21:32:36

1

我知道這是一個古老的線程,但它在谷歌排名相當高,所以我想我應該澄清一個免費的東西給別人橫跨它絆倒..

首先:程序無法訪問C: \文件和設置,因爲它不存在於Windows 7上。它是一個符號鏈接,沒有任何實際的內容,除了一個指針。但該程序不知道,因爲它將其視爲常規目錄。這就是爲什麼它失敗...

我想包在一個try整個事情,趕上(沒有捕捉任何動作)..

希望它有助於從嘗試任何建議的答案的人。