Поиск файла из VB.NET - PullRequest
0 голосов
/ 01 июня 2009

Учитывая имя файла, как мне эффективно искать этот файл на диске?

(Visual Studio 2005, т.е. .NET 2.0)

Ответы [ 2 ]

1 голос
/ 01 июня 2009

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

dir /s /b d:\<filename>

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

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

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

0 голосов
/ 01 июня 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...