Directory.Delete(path, true)
が「ディレクトリが空ではありません」というエラーで時々失敗するのはなぜですか?ディレクトリの再帰的な削除に Directory.Delete(myPath, true)
を使用すると、System.IO.IOException: The directory is not empty
例外がスローされる可能性があります。これは、特に true
(再帰的削除) が指定されている場合には直観に反します。 このメソッドは、単にディレクトリが空ではないという理由ではなく、ファイル アクセスの問題または権限の問題によってのみ失敗することが予想されます。
中心的な問題は、Directory.Delete
が再帰的有効であっても、ディレクトリ構造内の ファイル を本質的に削除しないことです。 データ損失を防ぐために、ディレクトリの削除を優先し、ファイルの削除をスキップします。
ディレクトリとその内容を確実に削除するには、カスタム関数が必要です。この関数は次のことを行う必要があります:
このアプローチにより、メイン ディレクトリを削除する前に、すべてのファイルとサブフォルダーが完全かつ安全に削除されます。
セキュリティを強化するには、削除できるディレクトリを制限します。 削除をファイル システムの特定の場所に制限することで、重要なデータが誤って削除されたり悪意を持って削除されたりすることを防ぎます。
次の関数は、ディレクトリの再帰的な削除を示しています。
<code class="language-csharp">public static void DeleteDirectory(string target_dir) { string[] files = Directory.GetFiles(target_dir); string[] dirs = Directory.GetDirectories(target_dir); foreach (string file in files) { File.SetAttributes(file, FileAttributes.Normal); // Remove read-only attribute File.Delete(file); } foreach (string dir in dirs) { DeleteDirectory(dir); // Recursive call for subdirectories } Directory.Delete(target_dir, false); // Delete the directory itself (non-recursive) }</code>
この改良された機能は、組み込みの Directory.Delete
メソッドの制限に対処し、再帰的なディレクトリ削除のためのより信頼性が高く安全なソリューションを提供します。
以上が再帰的削除が有効になっているにもかかわらず、`Directory.Delete(path, true)` が失敗することがあるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。