0

好的,我有一些代码可以扫描我的计算机并找到 .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)); 
        }
    }

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

4

2 回答 2

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) { }
  }
  //---------------------------------------------------------------------------

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

于 2012-05-17T02:07:44.507 回答
0

一般来说,您可以这样做,以便对每个文件夹进行递归调用,然后使用 try/catch 块来查看您可以访问或无法访问的女巫。但正如安德拉斯建议的那样,我也会选择已经存在的东西,这会节省你的时间

你的例子的另一种方法

于 2012-05-16T23:07:05.147 回答