帮助可视化编程?

时间:2010-06-06 02:35:57

标签: visual-studio-2008

我正在尝试复制Impero的策略锁定屏幕。

我正在尝试搜索程序以查看文件是否存在。这个概念是,如果文件存在,它将被启动。

使用后台工作者搜索它会更好吗?如果是这样,我将如何搜索它?

有关如何实现所需功能的任何建议?

1 个答案:

答案 0 :(得分:0)

由于您没有指定语言或框架,我假设您正在使用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);
}

我希望这能回答你的问题!