访问搜索结果

本文关键字:搜索结果 访问 | 更新日期: 2023-09-27 17:53:11

我正在开发一个winform应用程序,该应用程序将在指定源目录的文件名中搜索字符串。。问题是我需要访问该文件。。

示例:搜索结果为.flv或.swf--搜索完成时。。结果应该是可访问的。

这就是我到目前为止所拥有的。。

private void button1_Click(object sender, EventArgs e)
        {
            txtOutput.Text = "";
            foreach (string file in Directory.GetFiles("C:''Users''John''Desktop''Sample"))
                if (Path.GetFileName(file).Contains(txtSearch.Text))
                    txtOutput.Text += txtOutput.Text + file + ", ";
        }

有了这段代码,我可以搜索文件,但无法访问。。搜索的输出还附带了文件的路径。。(类似于c:''users''John''desktop''sample''Filename.swf(我只需要一个文件名,而不是整个路径。。

我正在使用多行文本框进行输出,是否应该使用其他内容。。如果你有更好的建议,请帮我。

访问搜索结果

如果要查找具有特定扩展名的文件,请使用EnumerateFiles或Directory.GetFiles方法的搜索模式。同时使用Path.GetFileName从文件路径获取文件名:

var path = "C:''Users''John''Desktop''Sample";
txtOutput.Text = String.Join(", ", Directory.GetFiles(path, "*" + txtSearch.Text)
                                            .Select(f => Path.GetFileName(f));

您的txtSearch.Text假定具有搜索文件的扩展名(即.swf.flv(。因此,搜索模式将是*.swf*.flv

因此,如果您的搜索文本框中有文本.swf,并且示例目录中有两个sfw文件,那么您将获得file1.swf, file2.swf的输出。


如果您想搜索文件名中的任何子字符串:

var path = "C:''Users''John''Desktop''Sample";
txtOutput.Text = 
     String.Join(", ", Directory.GetFiles(path, "*" + txtSearch.Text + "*")
                                .Select(f => Path.GetFileName(f)));

使用列表框显示文件,而不是多行文本框:

listBox1.DataSource = Directory.GetFiles(path, "*" + txtSearch.Text + "*")
                               .Select(f => Path.GetFileName(f))
                               .ToList();

更新:打开文件

private void listBox1_DoubleClick(object sender, EventArgs e)
{
    var fileName = listBox1.SelectedItem as string;
    if (fileName != null)
    {
        var path = Path.Combine("C:''Users''John''Desktop''Sample", fileName);
        Process.Start(path);
    }
}

你已经接近了,下面是我要做的一些更改:

创建ListBox,而不是多行文本框。它允许您以这种方式处理双击项目。对于我的示例,ListBox的名称是ListBox1。

将按钮1_Click方法更改为:

private void button1_Click(object sender, EventArgs e)
    {
        // You can add your seach text right to the GetFiles command, this will only  return files that match. 
        // You can set the list of of items int he ListBod to the result of GetFiles instead of having to loop through as well.
        listBox1.Items.AddRange(Directory.GetFiles(@"C:'Users'John'Desktop'Sample", "*" + txtSearch.Text + "*"));
    }

然后处理ListBox1_DoubleClick:

    private void listBox1_DoubleClick(object sender, EventArgs e)
    {
        // This will run whatever file name the user double-clicked
        System.Diagnostics.Process.Start(listBox1.SelectedItem.ToString());
    }
    private void button1_Click(object sender, EventArgs e)
    {
        txtOutput.Text = "";
        List<string> fileNames = new List<string>();
        foreach (string file in Directory.GetFiles("C:''Users''John''Desktop''Sample")){
            if (Path.GetFileName(file).Contains(txtSearch.Text)){
                txtOutput.Text += txtOutput.Text + file + ", ";
                fileNames.Add(file);
            }
        }
    }

因此,在这里您可以使用fileNames列表中的文件。