2010-10-07 10 views
0

J'ai vu ce code (et similaire) sur tout le web, mais je n'arrive tout simplement pas à le faire fonctionner. Chaque fois que je le débogue ligne par ligne, il déborde du débogage et charge l'application. Aucun message d'erreur n'est présenté, et tout code après la ligne "défectueuse" reste non traité.C# Impossible d'obtenir la liste des sous-répertoires

Voici le code incriminé:

foreach (string folder in allFolders) 
{ 
    string[] subFolders = Directory.GetDirectories(folder, 
     "*", SearchOption.AllDirectories); 
    MessageBox.Show("Test"); 
} 

La boucle foreach est entré en, mais la boîte de message est jamais affiché.

Si je supprime le SearchOption.AllDirectories le code est traité avec succès, mais j'ai besoin d'un moyen d'inclure tous les sous-répertoires dans les répertoires.

Des idées?

+0

Avez-vous essayé de déboguer ce code pour le moment? Est-ce que la chaîne [] est remplie? – Younes

+0

Pouvez-vous fournir un programme complet et exécutable (avec une méthode 'Main') qui illustre ce problème? –

Répondre

1

Votre code fonctionne bien pour moi.
Il me semble que cet appel de méthode prend juste beaucoup de temps à exécuter. Par exemple, s'il existe un répertoire racine dans allFolders, vous devez attendre plusieurs minutes (cela dépend des paramètres de votre système). Avez-vous vérifié cet extrait de code sur les répertoires avec juste un petit nombre de répertoires imbriqués?
J'ai supposé, que vous travaillez dans des formes de win et l'exécution n'atteint pas l'appel de MessageBox.Show.

+1

Merci, j'ai le sentiment que c'était le problème. Je l'ai essayé sur un dossier avec seulement un petit nombre de dossiers et il a semblé fonctionner. Je suppose qu'il y avait plus de sous-dossiers dans mon dossier original que je ne le pensais! –

+0

Bien que même après l'avoir laissé pendant plusieurs minutes, la boîte de message ne s'affiche toujours pas. Est-il possible qu'en raison du grand nombre de sous-dossiers, ce code ne fonctionnera jamais (bien qu'il ne produise pas d'erreur)? –

+0

Je ne pense pas que ce soit possible. Vous devriez prendre en considération que cette méthode peut prendre beaucoup de temps à s'exécuter. Juste pour comparer le temps d'exécution: essayez d'exécuter la recherche intégrée du système d'exploitation à partir du répertoire racine avec ce masque générique et voyez combien de temps dure cette recherche. –

1

MessageBox.Show ne fonctionne pas car votre code est sous environnement Web, tandis que MessageBox est utilisé dans winform. Habituellement, nous utilisons javascript pour faire apparaître une boîte de message, par exemple. alert('hi').

+0

Comment saviez-vous que le code du questionneur se trouve dans un environnement Web? –

+0

Je soupçonne une supposition éclairée. –

+0

@MAKKAM: Il doit être, car il a débogué le code, est intervenu dans la boucle, mais le 'MessageBox' fonctionne maintenant sans aucune exception. Il est probablement en train de déboguer une application web. –

0

Testé votre code et il fonctionne correctement, donc le problème peut être dans un autre endroit du code, ou il peut être un problème d'autorisation, bien qu'il renvoie une exception quand cela arrive, le MSGBOX montre aussi OK.

 List<string> allFolders = new List<string>(); 
     allFolders.Add(@"C:\joomla\"); 

     foreach (string folder in allFolders) 
     { 
      string[] subFolders = Directory.GetDirectories(folder, "*", SearchOption.AllDirectories); 
      MessageBox.Show("Test"); 
     } 
Questions connexes