扫描计算机并在列表框中显示文件?

时间:2012-05-16 21:10:29

标签: c# visual-c#-express-2010

好的,我有一些代码会扫描我的电脑并找到.txt文件并将它们显示在列表框中:

        private void button2_Click(object sender, EventArgs e)
    {
     IEnumerable<string> files = System.IO.Directory.EnumerateFiles(@"C:\", "*.txt*", System.IO.SearchOption.AllDirectories);
        foreach (var f in files)
        {
            listBox1.Items.Add(String.Format("{0}", f)); 
        }
    }

每次运行时都会出错。它说我不授权垃圾桶。我不关心天气它是否扫描垃圾。有没有办法将垃圾桶排除在扫描范围之外?此外,如果您发现任何错误,有人可以帮助我改进我的代码!谢谢!

2 个答案:

答案 0 :(得分:2)

最快的方法是将它们置于try-catch块下,因为EnumerateFiles函数由于操作系统权限而无权访问受限文件。

  private void SearchDrives()
  {
     foreach (String drive in Directory.GetLogicalDrives())
     {
        try
        {
           // Search for folders into the drive.
           SearchFolders(drive);
        }
        catch (Exception) { }
     }
  }
  //---------------------------------------------------------------------------

  private void SearchFolders(String prmPath)
  {
     try
     {
        foreach (String folder in Directory.GetDirectories(prmPath))
        {
           // Recursive call for each subdirectory.
           SearchFolders(folder);

           // Create the list of files.
           SearchFiles(folder);
        }
     }
     catch (Exception) { }
  }
  //---------------------------------------------------------------------------

  private void SearchFiles(String prmPath)
  {
     try
     {
        foreach (String file in Directory.GetFiles(prmPath))
        {
           FileInfo info = new FileInfo(file);
           if (info.Extension == ".txt")
           {
              listBox1.Items.Add(info.Name); 
           }
        }
     }
     catch (Exception) { }
  }
  //---------------------------------------------------------------------------

不仅是回收站,它还无法将多个文件的文件头读入您的系统目录。

答案 1 :(得分:0)

一般情况下,你可以这样做,这样你就可以对每个文件夹进行递归调用,只需使用try / catch块来查看你可以访问或不能访问的那些文件。但正如安德拉斯建议我也会选择已经存在的东西来节省你的时间

Another aproach on your example