c# - dossier - vb net lister fichier repertoire




Parcourir de manière récursive une arborescence de répertoires et répertorier les noms de fichiers (2)

J'essaie de parcourir une arborescence de répertoires complète et d'imprimer tous les noms de fichiers sur un contrôle de listbox. J'ai écrit du code mais il y a des erreurs. Je ne sais pas ce que je fais mal. En passant, c'est en C # en utilisant WPF dans Visual Studio.

Voici la solution complète du projet dans Visual Studio: http://tinyurl.com/a2r5jv9

Voici le code de MainWindow.xaml.cs si vous ne voulez pas télécharger la solution du projet: http://pastebin.com/cWRTeq3N

Je vais coller le code ici aussi.

public partial class MainWindow : Window
{
    private void Button_Click_1(object sender, RoutedEventArgs e)
    {
        string sourcePath = @"C:\temp\";            

        static void DirSearch(string sourcePath)
        {
            try
            {
                foreach (string d in Directory.GetDirectories(sourcePath))
                {
                    foreach (string f in Directory.GetFiles(d))
                    {
                        listBox1.Items.Add(f);
                    }
                    DirSearch(d);
                }
            }                      
            catch (Exception ex)
            {
                listBox1.Items.Add(ex.Message);
            }
        }
    }
}

Utilisez la surcharge GetDirectories () acceptant SearchOption :

string[] dirs = Directory.GetDirectories(path, "*", SearchOption.AllDirectories))
foreach(dir)
{
    ...
}

ou mieux EnumerateFiles () :

IEnumerable<string> files = Directory.EnumerateFiles(path, "*.*", SearchOption.AllDirectories))
foreach(files)
{
    ...
}

Notez qu'il effectue une analyse de système de fichiers paresseux .


Il y a un exemple complet sur le site de support Microsoft

Le problème ici est que vous voulez appeler DirSearch partir du gestionnaire d'événements, mais il semble que vous essayez de définir la méthode DirSearch dans le gestionnaire d'événements. Ce n'est pas valide.

Vous devez changer votre code comme suit:

private void Button_Click_1(object sender, RoutedEventArgs e)
{
    string sourcePath = @"C:\temp\";
    this.DirSearch(sourcePath);
}

private void DirSearch(string sDir) 
{
    try 
    {
        foreach (string f in Directory.GetFiles(sDir, txtFile.Text)) 
        {
            lstFilesFound.Items.Add(f);
        }

        foreach (string d in Directory.GetDirectories(sDir)) 
        {
            this.DirSearch(d);
        }
    }
    catch (System.Exception excpt)
    {
        listBox1.Items.Add(ex.Message);
    }
}






directory