2011-12-14 50 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整个事情,赶上(没有捕捉任何动作)..

希望它有助于从尝试任何建议的答案的人。