【问题标题】:Make Directory.GetFiles() ignore protected folders使 Directory.GetFiles() 忽略受保护的文件夹
【发布时间】:2011-06-27 06:20:51
【问题描述】:

我正在使用 Directory.GetFiles() 方法来获取要操作的文件列表。例如,当尝试访问受保护的文件夹时,此方法会引发 UnauthorizedAccessException。我希望它简单地跳过这些文件夹并继续。如何使用 Directory.GetFiles (最好)或其他方法来完成此操作?

更新:

这是引发异常的代码。我要求用户选择一个目录,然后检索文件列表。我注释掉了遍历文件的代码(所以这是现在的整个方法),问题仍然存在。在 Directory.GetFiles() 行上引发异常。

FolderBrowserDialog fbd = new FolderBrowserDialog();
DialogResult dr = fbd.ShowDialog();

if (dr == System.Windows.Forms.DialogResult.Cancel) return; 

string directory = fbd.SelectedPath;
string[] files = Directory.GetFiles(directory, "*.html", SearchOption.AllDirectories);

【问题讨论】:

  • 你能发布你的代码吗?如果检测到的文件之一被锁定,GetFiles 不应抛出。您确定当您遍历文件并对它们执行某些操作时不会发生异常吗?
  • GetFiles 调用是否出错,或者当您尝试对其找到的文件执行某些操作时?
  • @0xA3 我刚刚意识到它在访问受保护目录时抛出异常,而不是文件本身。

标签: c# .net file-io directory


【解决方案1】:

如果您在循环文件时遇到错误,您可以抛出一个 try catch,记录错误并继续处理。示例:

foreach(string filePath in Directory.GetFiles(blah))
{
   try
   {
      //do something with file
   }
   catch(UnauthorizedAccessException ex)
   {
      //email yourself about exception or just log it somewhere.
   }
}

【讨论】:

  • 如果不是因为Exception 的追捕,我会投票赞成。在这种情况下,您应该始终只捕获特定异常 - UnauthorizedAccessException
  • 谢谢,我的问题已在相关链接之一中得到解决,但这个答案对我也很有用
猜你喜欢
  • 2020-11-20
  • 2014-12-16
  • 2015-07-30
  • 2021-05-02
  • 1970-01-01
  • 2014-01-22
相关资源
最近更新 更多