Maison > développement back-end > C++ > Pourquoi Directory.Delete(true) renvoie-t-il « Le répertoire n'est pas vide » ?

Pourquoi Directory.Delete(true) renvoie-t-il « Le répertoire n'est pas vide » ?

Mary-Kate Olsen
Libérer: 2025-01-13 17:02:43
original
985 Les gens l'ont consulté

Why Does Directory.Delete(true) Throw

Supprimer complètement le répertoire : limitations et solutions de la méthode Directory.Delete(true)

Lors de l'utilisation de Directory.Delete(myPath, true) pour supprimer récursivement un répertoire, les développeurs peuvent toujours rencontrer une exception "répertoire non vide" même si recursive est défini sur true. C'est déroutant car la méthode vise à supprimer tout le contenu du répertoire avant de le supprimer.

Analyse des causes

Le comportement dans la question découle des limitations de la méthode Directory.Delete. Cette méthode est conçue pour permettre uniquement la suppression des répertoires vides, tandis que les fichiers et sous-répertoires du répertoire cible ne sont pas affectés. Lorsque recursive vaut true , Directory.Delete tentera de supprimer tous les sous-répertoires non vides, mais ne supprimera pas les fichiers.

Solution

Pour résoudre ce problème, vous pouvez utiliser une fonction récursive qui supprime explicitement les fichiers et sous-répertoires avant d'essayer de supprimer le répertoire parent. L'extrait de code suivant illustre cette approche :

<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>
Copier après la connexion

En supprimant explicitement les fichiers et sous-répertoires en premier, nous nous assurons que le répertoire parent est vide avant de tenter de le supprimer. Cette approche résout l'exception "le répertoire n'est pas vide" qui se produit lors de l'utilisation de Directory.Delete(true).

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal