0

フォルダを指定すると、そのディレクトリのすべてのファイルが削除されていることを確認したいと思います。IOExceptions または Access Denied エラーが発生する可能性があることは知っていますが、それらを脇に置いて、実際に削除できるファイルの削除を続行するにはどうすればよいですか? これは可能ですか?どこから始めればよいか、私に光を当ててください。

4

5 に答える 5

3

ディレクトリ内のファイルをループして、try/catch 内の各ファイルを削除すると、例外の後でも続行できます。ディレクトリ全体を削除しようとすると、失敗すると失敗します。

編集:要求されたコード

private void DeleteFiles(DirectoryInfo Directory)
    {
        bool AllFilesDeleted = true;
        foreach(FileInfo oFile in Directory.GetFiles())
        {
            try
            {
                oFile.Delete();
            }
            catch (Exception ex) { AllFilesDeleted = false; }
        }
        foreach (DirectoryInfo oDirectory in Directory.GetDirectories())
        {
            DeleteFiles(oDirectory);
        }

        if (AllFilesDeleted)
        {
            try
            {
                Directory.Delete();
            }
            catch (Exception ex){}
        }
    }
于 2010-08-06T06:35:10.813 に答える
3

削除できるすべてのファイルを削除する場合は、ファイルのリストを作成し (サブディレクションに対して再帰的に)、それらを個別に削除して、例外をスローするファイルをスキップします。

于 2010-08-06T06:36:12.497 に答える
2

IOExceptions または Access Denied エラーですが、それらを脇に置いて削除を続行するにはどうすればよいですか

は?IO の問題がある場合、またはファイルにアクセスできない場合は、ファイルを削除できません。それらは例外です。彼らはあなたに「これはうまくいかなかった、そしてこれが理由だ」と言っています。これらは、単に無視してよい丁寧な警告メッセージではなく、そもそも削除が機能しなかった理由です。

于 2010-08-06T06:34:20.847 に答える
1

再帰的な検索の質問に答える:

void delete(DirectoryInfo di) {
 foreach(DirectoryInfo di2 in di.GetDirectories()) {
  delete(di2);
 }
 foreach(FileInfo fi in di.GetFiles()) {
  fi.Delete();
 }
}

...上で提案したように、試してみてください...さまざまな部分をキャッチすることで、特定のファイルを削除できないことに対処できます。

于 2010-08-06T06:55:30.133 に答える
0

@Will Aが提案した順序を少し変更し、ディレクトリ自体を削除する行を追加すると、うまくいくはずです。何かのようなもの

        static void delete(DirectoryInfo di)
        {
            foreach (FileInfo fi in di.GetFiles())
            {
                try
                {
                    fi.Delete();
                }
                catch (Exception)
                {

                }
            }

            foreach (DirectoryInfo di2 in di.GetDirectories())
            {
                delete(di2);
            }
            try
            {
                di.Delete();
            }
            catch (Exception)
            {
            }

        }

空のフォルダーをクリアする必要があります

于 2010-08-06T09:37:55.893 に答える