2009-06-01 2 views
0

Учитывая имя файла, как я могу эффективно искать этот файл на диске?Поиск файла с VB.NET

(Visual Studio 2005, то есть .NET 2.0)

+0

Прошу прощения за путаницу. Я использую VB.net, VS 2005 –

ответ

1

Ваш вопрос расплывчатый, вы не указали какой-либо язык программирования. Таким образом, вы можете сделать это, используя командную строку:

dir /s /b d:\<filename> 

или использовать вышеуказанное в системном вызове с любого языка, который вы используете.

В C/C++ или любой другой язык, который использует родной Win32 API для использования:

и рекурсию т через любые каталоги, с которыми вы сталкиваетесь. В C#/VB/другие .Net язык, это:

0

Если вы хотите реализовать механизм поиска, я хотел бы начать с чем-то вроде этого (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); 
     } 

    } 
} 

Это просто быстрый класс для этого. Вы должны реализовать форму, используя ее, некоторую обработку ошибок в методе поиска и, возможно, некоторые флаги отмены, чтобы вы не продолжали искать навсегда, когда вы уже нашли то, что хотели.

я реализовал свою форму с чем-то вроде этого:

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); 
    } 

Если у вас есть более конкретные сомнения, пожалуйста, напишите их, и мы будем стараться, чтобы посмотреть на него и сделать все возможное, чтобы помочь вам.

Смежные вопросы