foreach循环终于

时间:2012-02-08 12:49:51

标签: c# loops 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);
                }
            }
        }
    }
}

希望它足够清楚。

2 个答案:

答案 0 :(得分:5)

您的代码:

  1. 遍历给定的目录集并为每个目录循环:
  2. 获取该目录中的“* .csv”文件以及每个文件:
  3. 做点事情然后:
  4. “C:\ Test”
  5. 删除文件

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

答案 1 :(得分: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移动到新文件中。

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