цикл foreach наконец - PullRequest
       19

цикл foreach наконец

0 голосов
/ 08 февраля 2012

У меня есть цикл foreach, в котором есть попытка catch и наконец.он просматривает файлы в папке и, наконец, удаляет их все .... но теперь, если у меня есть два файла, так как он удаляет все (мне нужно удалить все из-за функциональности приложения), он не пойдет через второй файл.можно ли завершить цикл 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 ]

5 голосов
/ 08 февраля 2012

Ваш код:

  1. Переходит по заданному набору каталогов и для каждого из них:
  2. Получает файлы "* .csv" в этом каталоге и с каждым файлом:
  3. Что-то делает, а затем:
  4. Удаляет файлы из "C: \ Test" .

Если вы не удаляете файл, который вы простообработано или, по крайней мере, файлы из каталога, который вы сейчас обрабатываете, а не файлы из "C: \ Test"?

2 голосов
/ 08 февраля 2012

Я не совсем уверен, правильно ли я понял, что вы просите, но мне кажется, что решение довольно тривиально, например:

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 в новый.

Если это не то, о чем вы просите, уточните.

...