访问搜索结果
本文关键字:搜索结果 访问 | 更新日期: 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列表中的文件。