c# - 尝试嵌套 foreach 循环中的 catch 块不返回正确的输出,c#
问题描述
我知道这个问题已经被问过很多次了,但我无法理解其背后的逻辑。我有这个嵌套的 foreach 循环,结构如下:
foreach (string currentFile in csvfiles)//loops through all csv files
{
string fileName = currentFile.Substring(Input_Path.Length);//works
try
{
foreach (string line in File.ReadAllLines(currentFile))
{
wafer = Wafer_value(line, wafer);
}
Console.WriteLine(wafer);
Directory.Move(currentFile, Path.Combine(archiveDirectory, fileName));
}
catch (Exception e)
{
Console.WriteLine(e);
Directory.Move(currentFile, Path.Combine(Error_Path, fileName));
continue;
}
}
及其方法:
public static string Wafer_value(string line, string wafer)
{
try
{
if (line.Contains("Wafer"))
{
wafer = line;
}
string[] separatingStrings = { "Wafer: ", "," };
string[] str = wafer.Split(separatingStrings, System.StringSplitOptions.RemoveEmptyEntries);
return str.First();
}
catch (Exception e)
{
Console.WriteLine(e);
throw new Exception();
}
}//End Function Wafer_value
代码应该是,如果方法中存在异常,它将抛出到 main 方法,在那里它将将该文件移动到错误文件夹。当方法中没有异常时,它会照常进行,然后将其移至主文件夹archiveDirectory。所以这就是我卡住的地方。当所有文件都有异常时,它会将其移动到错误文件夹。但是,当混合中有一个没有抛出异常的文件时,它只会将其中一个异常文件移动到错误文件夹中,然后将剩余的所有文件移动到主文件夹中,即使它们有异常。
为此,内部 foreachloop 循环遍历文件的所有行,外部 foreachloop 循环遍历所有 csvfiles。
我该怎么做才能确保所有引发异常的文件都进入错误文件夹?