.NET 3.5 での再帰的なディレクトリ削除のトラブルシューティング
.NET 3.5 で Directory.Delete(path, true)
を使用する場合の一般的なエラー「System.IO.IOException: ディレクトリが空ではありません」は誤解を招きます。 true
パラメータは再帰的な削除を示しますが、ディレクトリ内のファイルは自動的に処理されません。
ディレクトリとその内容を再帰的に確実に削除するには、カスタム関数が必要です。
<code class="language-csharp">public static void DeleteDirectoryRecursively(string targetDir) { string[] files = Directory.GetFiles(targetDir); string[] dirs = Directory.GetDirectories(targetDir); foreach (string file in files) { File.SetAttributes(file, FileAttributes.Normal); // Remove read-only attributes File.Delete(file); } foreach (string dir in dirs) { DeleteDirectoryRecursively(dir); // Recursive call for subdirectories } Directory.Delete(targetDir, false); // Delete the directory itself }</code>
この改良された方法では、まずファイルから読み取り専用属性が削除され、次に各ファイルが個別に削除されます。 最終的にターゲット ディレクトリを削除する前に、それ自体を再帰的に呼び出して、ネストされたサブディレクトリを処理します。 これにより、完全かつエラーのない削除が保証されます。 システムで保護されたフォルダーを誤って削除しないように、アクセス制限を実装することをお勧めします。
以上がDirectory.Delete(path, true) が失敗するのはなぜですか? .NET 3.5 でディレクトリを再帰的に削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。