使用系统线程循环遍历文件夹,如果访问文件被拒绝,如何忽略并继续。
// Start thread.
System.Threading.ThreadStart start = delegate { scanner(@"C:\", "*.html;*.txt"); };
System.Threading.Thread thread = new System.Threading.Thread(start);
thread.Start();
private static string scanstatus = string.Empty;
private static void scanner(string folder, string patterns)
{
try
{
// Get the patterns.
string[] pattern_array = patterns.Split(';');
// Search.
foreach (string pattern in pattern_array)
{
foreach (string path in System.IO.Directory.GetFiles(folder, pattern, System.IO.SearchOption.AllDirectories))
{
// trim path
scanstatus = (path.Length > 60) ? "../" + path.Substring(path.Length - 59, 59) : path;
System.Threading.Thread.Sleep(5000);
}
}
}
catch (System.Exception excpt)
{
Console.WriteLine(excpt.Message);
}
finally
{
Console.WriteLine("*************DONE*************");
}
}
最佳答案
正如丹尼尔在评论中提到的,基本上当你想继续进行下一次迭代时,你需要将 try/catch 移动到循环内部。目前您的 catch 位于外循环之外,因此如果抛出异常,则无法继续执行。在 C# 中没有“从你到达的地方继续”的概念。
我强烈建议你也限制你的捕获量。例如:
foreach (string pattern in patternArray)
{
try
{
foreach (string path in Directory.GetFiles(...))
{
// ...
}
}
catch (IOException e)
{
// Log it or whatever
}
// Any other exceptions you want to catch?
}
注意事项:
Exception
几乎总是一个坏主意,除非作为您的请求(或其他)处理的顶层的最终支持 using
指令,您可以避免在代码中放置完全限定的类型名称,这将使阅读更容易关于c# - 如果对文件的访问被拒绝,线程 try catch 继续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12000373/