ディレクトリを完全に削除します: Directory.Delete(true) メソッドの制限事項と解決策
Directory.Delete(myPath, true)
を使用してディレクトリを再帰的に削除すると、recursive
が true
に設定されている場合でも、開発者は依然として「ディレクトリが空ではない」という例外に遭遇する可能性があります。このメソッドは、ディレクトリを削除する前にディレクトリの内容をすべて削除することを目的としているため、これは不可解です。
原因分析
質問内の動作は、Directory.Delete
メソッドの制限から生じます。このメソッドは、空のディレクトリのみを削除できるように設計されており、ターゲット ディレクトリ内のファイルとサブディレクトリは影響を受けません。 recursive
が true
の場合、 Directory.Delete
は空でないサブディレクトリを削除しようとしますが、ファイルは削除しません。
解決策
この問題を解決するには、親ディレクトリを削除する前にファイルとサブディレクトリを明示的に削除する再帰関数を使用できます。次のコード スニペットは、このアプローチを示しています。
<code class="language-csharp">public static void DeleteDirectory(string target_dir) { string[] files = Directory.GetFiles(target_dir); string[] directories = Directory.GetDirectories(target_dir); foreach (string file in files) { File.Delete(file); // 删除所有文件 } foreach (string directory in directories) { DeleteDirectory(directory); // 递归删除子目录 } Directory.Delete(target_dir, false); // 删除空父目录 }</code>
最初にファイルとサブディレクトリを明示的に削除することで、親ディレクトリを削除する前に親ディレクトリが空であることが確認されます。このアプローチは、Directory.Delete(true)
を使用するときに発生する「ディレクトリが空ではありません」例外を解決します。
以上がDirectory.Delete(true) が「ディレクトリは空ではありません」をスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。