我有TextBox
来搜索主文件夹中的文件,它也有子文件夹。我想获取ListBox
中所选项目的当前文件夹名称,以便在另一个ListBox
中显示。
我该怎么做?
我最近的努力:
这是我的完整编码!!
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
string path = @"C:\Users\guest\Desktop\test\";
listBox2.Items.Clear();
{
listBox2.Items.Add(Path.GetDirectoryName(path));
}
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
DirectoryInfo sdir = new DirectoryInfo(@"C:\Users\guest\Desktop\test");
FileInfo[] files = sdir.GetFiles(textBox1.Text.ToString() + "*", System.IO.SearchOption.AllDirectories);
string search = "";
listBox1.Items.Clear();
foreach (FileInfo file in files)
{
search = file.Name;
listBox1.Items.Add(Path.GetFileNameWithoutExtension(search));
}
}
标记为红色的所需输出请参阅下方的快照。
文件名搜索并获取完整路径
答案 0 :(得分:0)
问题在于,当您添加到listBox1
时,您正在添加string
- 然后会丢失其原始路径的上下文。解决方案是添加object
(例如TestPath
) - 可以ToString
添加到您想要的文本中,但仍保留其原始路径的上下文。
以下可能会帮助您实现这一目标。
添加此课程:
public class TestPath
{
public FileInfo Original { get; private set; }
public TestPath(FileInfo original)
{
Original = original;
}
public override string ToString()
{
return Path.GetFileNameWithoutExtension(Original.Name);
}
}
然后替换:
foreach (FileInfo file in files)
{
search = file.Name;
listBox1.Items.Add(Path.GetFileNameWithoutExtension(search));
}
使用:
foreach (FileInfo file in files)
{
var path = new TestPath(file);
listBox1.Items.Add(path);
}
然后替换:
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
string path = @"C:\Users\guest\Desktop\test\";
listBox2.Items.Clear();
{
listBox2.Items.Add(Path.GetDirectoryName(path));
}
}
使用:
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
listBox2.Items.Clear();
var currentItem = listBox1.SelectedItem as TestPath;
listBox2.Items.Add(currentItem.Original.FullName); // or any property
}