0

我有一个包含 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);
                }
            }
        }
    }
}

希望它足够清楚。

4

2 回答 2

5

你的代码:

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

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

于 2012-02-08T13:14:47.000 回答
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到新的。

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

于 2012-02-08T12:59:11.377 回答