Учитывая имя файла, как я могу эффективно искать этот файл на диске?Поиск файла с VB.NET
(Visual Studio 2005, то есть .NET 2.0)
Учитывая имя файла, как я могу эффективно искать этот файл на диске?Поиск файла с VB.NET
(Visual Studio 2005, то есть .NET 2.0)
Ваш вопрос расплывчатый, вы не указали какой-либо язык программирования. Таким образом, вы можете сделать это, используя командную строку:
dir /s /b d:\<filename>
или использовать вышеуказанное в системном вызове с любого языка, который вы используете.
В C/C++ или любой другой язык, который использует родной Win32 API для использования:
и рекурсию т через любые каталоги, с которыми вы сталкиваетесь. В C#/VB/другие .Net язык, это:
Если вы хотите реализовать механизм поиска, я хотел бы начать с чем-то вроде этого (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);
}
Если у вас есть более конкретные сомнения, пожалуйста, напишите их, и мы будем стараться, чтобы посмотреть на него и сделать все возможное, чтобы помочь вам.
Прошу прощения за путаницу. Я использую VB.net, VS 2005 –