【问题标题】:foreach loop finallyforeach 循环终于
【发布时间】:2012-02-08 12:49:51
【问题描述】:

我有一个包含 try catch 和 finally 的 foreach 循环。它遍历文件夹中的文件,最后将它们全部删除....但是现在如果我有两个文件,因为它正在删除所有文件(由于应用程序功能,我需要删除所有文件)它不会通过第二个文件。是否可以让 foreach 循环完成然后删除 foreach 方法中的所有文件这是一个示例:

foreach (DirectoryInfo directory in directories)
{
    foreach (FileInfo file in directory.GetFiles("*.csv"))
    {
        try
        {
           //do something with file

        }

        catch (Exception e)
        {
            //catch exception
        }
        finally
        {
            if (!IsFileLocked(file))
            {
                string[] files = Directory.GetFiles(@"C:\Test");
                foreach (string filetoDelete in files)
                {
                    File.Delete(filetoDelete);
                }
            }
        }
    }
}

希望它足够清楚。

【问题讨论】:

  • 在循环遍历每个文件时删除它们,否则不需要循环。
  • 最好使用 FOR 循环而不是 foreach。
  • 但是我有与该文件相关的图像,我也需要清除图像
  • 将文件删除代码部分保留在目录循环之外,它将一次删除所有文件,如果您想在每次目录检查后删除文件,请将其保留在 fileinfo 循环之外。
  • C:\Testdirectories是什么关系?

标签: c# loops try-catch finally


【解决方案1】:

您的代码:

  1. 循环遍历给定的目录集并针对每个目录:
  2. 在该目录和每个文件中获取“*.csv”文件:
  3. 做某事然后:
  4. "C:\Test" 中删除文件。

您不应该删除刚刚处理的文件,或者至少删除当前正在处理的目录中的文件,而不是“C:\Test”中的文件吗?

【讨论】:

    【解决方案2】:

    我不太确定我是否正确理解您的要求,但对我来说,解决方案似乎很简单,如下所示:

    foreach (DirectoryInfo directory in directories)
    {
        foreach (FileInfo file in directory.GetFiles("*.csv"))
        {
            try
            {
                //do something with file
    
             }
    
             catch (Exception e)
             {
                   //catch exception
              }
         }
    
         foreach(FileInfo fileToDeleteInfo...)
         {
              try
              {
                   if (!IsFileLocked(fileToDeleteInfo))
                   {
                      string[] files = Directory.GetFiles(@"C:\Test");
                      foreach (string filetoDelete in files)
                      {
                           File.Delete(filetoDelete);
                      }
                    }
    
    
                }
              catch(...)
              {... }
         }
    

    换句话说,将文件删除从第二个(嵌套的)foreach 移到新的。

    如果这不是您的要求,请澄清。

    【讨论】:

      猜你喜欢
      • 2021-05-28
      • 1970-01-01
      • 2012-04-07
      • 2016-09-26
      • 2012-07-19
      • 1970-01-01
      • 2020-02-19
      • 2012-05-23
      相关资源
      最近更新 更多