我正在开发一个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)我只需要一个文件名,而不是整个路径..
我使用多行文字框输出,我应该使用别的东西吗? ..如果你有更好的建议,请帮助我。
答案 0 :(得分:1)
如果您要查找具有特定扩展名的文件,请使用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)));
而不是多行文本框,使用listbox显示文件:
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);
}
}
答案 1 :(得分:1)
你接近了,我将做一些改变:
创建ListBox而不是多行文本框。它允许您甚至在某个项目上处理双击。对于我的示例,ListBox名称是ListBox1。
将button1_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());
}
答案 2 :(得分:0)
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 List中的文件。