2009-06-01 8 views

Répondre

1

Votre question est vague, vous ne spécifiez pas de langage de programmation. Donc, vous pouvez le faire en utilisant l'invite de commande:

dir /s /b d:\<filename> 

ou utiliser ce qui précède dans un appel système quelle que soit la langue que vous utilisez.

en C/C++ ou toute autre langue qui utilise les API natives Win32 utilisent:

et récursion t par tous les répertoires que vous rencontrez. En C#/VB/autre langue .Net, il est:

0

Si vous souhaitez mettre en œuvre le mécanisme de recherche, je commence par quelque chose comme ça (C#)

using System; 
using System.Collections.Generic; 
using System.IO; 

namespace Samples.FileSearcher 
{ 
    public delegate void FileFoundHandler(string fileName); 
    public delegate void SearchStatChangeHandler(bool newStat); 
    public class FileSearch 
    { 
     private bool _isSearching; 
     private FileFoundHandler _fileFound; 
     private SearchStatChangeHandler _searchStatusChanged; 
     public bool IsSearching { get { return _isSearching; } } 
     public event FileFoundHandler FileFound{add { _fileFound += value; }remove { _fileFound -= value; }} 
     public event SearchStatChangeHandler SearchingStatusChanged { add { _searchStatusChanged += value; } remove { _searchStatusChanged -= value; } } 

     public void Search(string rootFolder, string filePattern) 
     { 
      ChangeStat(true); 
      Queue<string> folderList = new Queue<string>(); 
      folderList.Enqueue(rootFolder); 

      while (folderList.Count > 0) 
      { 
       string currentFolder = folderList.Dequeue(); 
       foreach (string folder in Directory.GetDirectories(currentFolder)) 
        folderList.Enqueue(folder); 
       foreach (string foundFile in Directory.GetFiles(currentFolder, filePattern)) 
        if (_fileFound != null) 
         _fileFound(foundFile); 
      } 
      ChangeStat(false); 
     } 
     private void ChangeStat(bool newStat) 
     { 
      _isSearching = newStat; 
      if (_searchStatusChanged != null) _searchStatusChanged(_isSearching); 
     } 

    } 
} 

C'est juste une classe rapide pour le faire. Vous devez implémenter le formulaire en l'utilisant, un peu de gestion des erreurs sur la méthode de recherche et probablement des drapeaux d'annulation afin de ne pas continuer à chercher quand vous avez déjà trouvé ce que vous vouliez.

Je mis en œuvre mon formulaire avec quelque chose comme ceci:

private void button1_Click(object sender, EventArgs e) 
    { 
     listView1.Items.Clear(); 
     Samples.FileSearcher.FileSearch searcher = new Samples.FileSearcher.FileSearch(); 
     searcher.FileFound += new FileFoundHandler(searcher_FileFound); 
     searcher.Search(textBox1.Text, textBox2.Text); 
    } 

    void searcher_FileFound(string fileName) 
    { 
     listView1.Items.Add(fileName); 
    } 

Si vous avez des doutes plus spécifiques, s'il vous plaît les poster et nous allons essayer de l'examiner et faire de notre mieux pour vous aider.

Questions connexes