首页 > 解决方案 > 尝试嵌套 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。

我该怎么做才能确保所有引发异常的文件都进入错误文件夹?

标签: c#debuggingforeachtry-catchtry-catch-finally

解决方案


推荐阅读