Dépannage de la suppression récursive de répertoires dans .NET 3.5
L'erreur courante « System.IO.IOException : Le répertoire n'est pas vide » lors de l'utilisation de Directory.Delete(path, true)
dans .NET 3.5 est trompeuse. Le paramètre true
indique une suppression récursive, mais il ne gère pas automatiquement les fichiers dans le répertoire.
Pour supprimer de manière fiable un répertoire et son contenu de manière récursive, une fonction personnalisée est nécessaire :
<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>
Cette méthode améliorée supprime d'abord tous les attributs en lecture seule des fichiers, puis supprime chaque fichier individuellement. Il s'appelle récursivement pour gérer les sous-répertoires imbriqués avant de finalement supprimer le répertoire cible. Cela garantit une suppression complète et sans erreur. Il est recommandé de mettre en œuvre des restrictions d'accès pour éviter la suppression accidentelle des dossiers protégés par le système.
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!