Directory.Delete(path, true)
échoue-t-il parfois avec « Le répertoire n'est pas vide » ?L'utilisation de Directory.Delete(myPath, true)
pour la suppression récursive de répertoires peut générer une exception System.IO.IOException: The directory is not empty
. Ceci est contre-intuitif, surtout lorsque true
(suppression récursive) est spécifié. On s'attend à ce que la méthode échoue uniquement en raison de problèmes d'accès aux fichiers ou de problèmes d'autorisation, pas simplement parce que le répertoire n'est pas vide.
Le problème principal est que Directory.Delete
, même avec la récursion activée, ne supprime pas automatiquement les fichiers dans la structure de répertoires. Pour se protéger contre la perte de données, il donne la priorité à la suppression des répertoires et ignore la suppression des fichiers.
Pour supprimer de manière fiable un répertoire et son contenu, une fonction personnalisée est nécessaire. Cette fonction devrait :
Cette approche garantit la suppression complète et sûre de tous les fichiers et sous-dossiers avant de tenter de supprimer le répertoire principal.
Pour une sécurité renforcée, limitez les répertoires pouvant être supprimés. Limiter la suppression à des emplacements spécifiques du système de fichiers empêche la suppression accidentelle ou malveillante de données critiques.
La fonction suivante illustre la suppression récursive de répertoire :
<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>
Cette fonction améliorée répond aux limites de la méthode Directory.Delete
intégrée, offrant une solution plus fiable et sécurisée pour la suppression récursive de répertoires.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!