C# 在For循环中放一个Try-Catch是不好的做法吗?
我正在创建一个命令行实用程序,它将删除子目录/文件。如果文件正在使用中,将抛出C# 在For循环中放一个Try-Catch是不好的做法吗?,c#,for-loop,try-catch,C#,For Loop,Try Catch,我正在创建一个命令行实用程序,它将删除子目录/文件。如果文件正在使用中,将抛出System.IO.IOException。我在for循环中使用try-catch块 问题: 1.在for循环中尝试捕捉是否不好 2.如果是,有什么更好的选择 我的代码: System.IO.DirectoryInfo di = new DirectoryInfo(path); foreach (FileInfo file in di.GetFiles()) { try
System.IO.IOException
。我在for循环中使用try-catch块
问题:
1.在for循环中尝试捕捉是否不好
2.如果是,有什么更好的选择
我的代码:
System.IO.DirectoryInfo di = new DirectoryInfo(path);
foreach (FileInfo file in di.GetFiles())
{
try
{
file.Delete();
}
catch(System.IO.IOException)
{
Console.WriteLine("Please Close the following File {0}", file.Name);
}
}
不,这可能非常有用。例如:如果您不想在抛出异常时完全停止循环,或者如果由于该异常,当前迭代中不应该运行额外的代码,那么您可以执行以下操作
System.IO.DirectoryInfo di = new DirectoryInfo(path);
foreach (FileInfo file in di.GetFiles())
{
try
{
file.Delete();
}
catch(System.IO.IOException)
{
Console.WriteLine("Please Close the following File {0}", file.Name);
continue;
}
//
// Other Code
//
}
通过这种方式,您可以记录错误以供以后查看,但仍然可以处理您试图处理的其余内容。不,故意跳过异常不是一种坏做法。 但是看看你的用例 我正在创建一个命令行实用程序,它将删除子目录/文件。如果文件正在使用中,将引发System.IO.IOException 我建议您删除该目录,而不是在子文件夹中的每个文件上循环。
您还可以使用此catch执行类似于在重新启动时删除文件的操作@Mac-非常感谢代码和回答我的问题。这里的
continue
是多余的;您已经在循环体的末尾,因此continue
不会跳过任何内容。@Servy-您是对的。我应该用更多的示例代码进行详细说明。如果有任何与文件处理相关的额外代码,则不希望运行它。相反,您希望跳到下一个文件。该消息假定失败是因为文件已打开。如果文件由于其他原因无法删除怎么办?@EricLippert-我正是这么想的,但是,我不确定如何继续。如果文件因其他原因无法删除,您将如何处理?首先,确定是否有人关心。如果没有人关心,不要为此而紧张。如果有人在乎,下一步要做的就是决定如何告诉他们。控制台输出也许是一种好方法,也许不是。很难说不了解节目的其余部分。下一步要做的是决定告诉他们什么。告诉他们真相:“blah.txt文件无法删除”。考虑从异常中添加消息以添加更多上下文。但你知道的事实是,文件无法删除,所以从这个开始。我猜,因为它是控制台输出,任何使用它的用户都会理解“无法删除”可能意味着他们需要关闭文件。否则可以添加建议“如果文件已打开,请将其关闭”或其他内容。