Поскольку вы не указали язык или структуру, я предполагаю, что вы используете C #. Вы сказали:
Я пытаюсь выполнить поиск моей программы, чтобы увидеть, существует ли файл. Концепция заключается в том, что если файл существует, он будет запущен.
Вот короткий фрагмент, который будет делать то, что вы просили.
string path = @"C:\path\to\file";
if (File.Exists(path))
{
Process p = new Process();
p.StartInfo.FileName = path; // launches the default application for this file
p.Start();
}
Это немного упрощенно: p.Start () может выдавать исключения по ряду причин. Кроме того, у вас мало контроля над , которое приложение открывает файл - это полностью зависит от реестра пользователя. Например, если пользователь выбирает файл HTML для открытия, некоторые пользователи увидят файл, открытый с помощью Internet Explorer, в то время как другие пользователи будут иметь установленный Firefox, и поэтому Firefox будет использоваться для просмотра файла.
Обновление:
Обычно я ищу файлы, используя следующее:
string[] matches = Directory.GetFiles(@"C:\", "*.txt");
Возвращает все пути ко всем файлам на диске C:\
, заканчивающимся .txt
. Конечно, ваш шаблон поиска будет другим.
Если вызов Directory.GetFiles () (или что вы используете - вы не указали) занимает много времени, тогда да, использование BackgroundWorker - это хороший подход. Вот как вы можете это сделать. В конструкторе класса (вы можете назвать его SearchFiles
):
string searchPattern;
string searchDirectory;
BackgroundWorker worker;
string[] matches;
/// <summary>
/// Constructs a new SearchFiles object.
/// </summary>
public SearchFiles(string pattern, string directory)
{
searchPattern = pattern;
searchDirectory = directory;
worker = new BackgroundWorker();
worker.DoWork += FindFiles;
worker.RunWorkerCompleted += FindFilesCompleted;
worker.RunWorkerAsync();
}
void FindFilesCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Error == null)
{
// matches should contain all the 'found' files.
// you should fire an event to notify the caller of the results
}
}
void FindFiles(object sender, DoWorkEventArgs e)
{
// this is the code that takes a long time to execute, so it's
// in the DoWork event handler.
matches = System.IO.Directory.GetFiles(searchDirectory,searchPattern);
}
Надеюсь, это ответит на ваш вопрос!