在C#中搜索文件扩展名的快捷方法

时间:2017-12-27 03:03:09

标签: c# file

我正在寻找一种快速搜索特定文件扩展名的方法。我尝试了一种递归方法,但是通过计算机上的所有目录需要很长时间。我找到了一种方法,通过输入* .ISO,使用文件浏览器中的搜索栏找到带有文件扩展名的所有文件,这样有没有办法将这些结果复制到C#。我也对任何其他以相似速度产生相同结果的方法持开放态度。我稍后还需要同时搜索多个文件扩展名。

这是我试过的递归代码。

private void frmSearch_Load(object sender, EventArgs e)
    {
        Thread thread = new Thread(intermediate);
        thread.Start();
    }

    private void intermediate()
    {
        DriveInfo[] driveInfo = DriveInfo.GetDrives();
        foreach (var letter in driveInfo)
        {
            GetIsoFiles(letter.Name);
        }
    }

    private void GetIsoFiles(string dir)
    {
        try
        {
            var isoFiles = Directory.GetFiles(dir, "*.iso", SearchOption.TopDirectoryOnly);
            foreach (var file in isoFiles)
            {
                appendFilebox(file);
            }
        }
        catch (Exception) { }

        foreach (var subdirectory in Directory.GetDirectories(dir))
        {
            try
            {
                GetIsoFiles(subdirectory);
            }
            catch { }
        }
    }

    private void appendFilebox(string Value)
    {
        if (InvokeRequired)
        {
            this.Invoke(new Action<string>(appendFilebox), new object[] { Value });
            return;
        }
        rtbFile.Text += Value;
    }

1 个答案:

答案 0 :(得分:1)

最快的是:

Process p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.FileName = @"c:\windows\system32\cmd.exe";
p.StartInfo.Arguments = "/c dir c:\*.iso /s /b";
p.Start();
string output = p.StandardOutput.ReadToEnd();
p.WaitForExit();

在此之后,您可以使用\n

拆分输出

这告诉您搜索目录+所有子目录中的所有ISO文件,并仅提供路径+文件名。

您也可以使用:

Directory.GetFiles(@"c:\", "*.iso", SearchOption.AllDirectories)