0

私はtry catchとfinallyを持つforeachループを持っています。フォルダー内のファイルを通過し、最終的にそれらすべてを削除します....しかし、2つのファイルがある場合、すべてを削除しているため(アプリの機能のためにすべてを削除する必要があります)、2番目のファイルには移動しません。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(...)
          {... }
     }

つまり、ファイルの削除を 2 番目 (ネストされた)foreachから新しいものに移動します。

これがあなたが求めているものでない場合は、明確にしてください。

于 2012-02-08T12:59:11.377 に答える