我想减少路径的长度,只显示文件名。
例如,假设路径为c:\\program files\...\123.jpg
我只想显示123.jpg
。
这是我迄今为止一直在使用的代码。有人可以建议修改吗?
private void button1_Click(object sender, EventArgs e)
{
panel3.Controls.Clear();
var ofd = new OpenFileDialog();
ofd.Multiselect = true;
ofd.Filter = "DICOM Files (*.dcm;*.dic)|*.dcm;*.dic|All Files (*.*)|*.*";
if (ofd.ShowDialog() == DialogResult.Cancel)
return;
foreach (string s in ofd.FileNames)
{
listBox1.Items.Add(s);
}
}
答案 0 :(得分:3)
System.IO namespace
中有一个名为Path的班级
在它可以找到的众多静态方法之间
Path.GetFilename(string);
在Add循环中使用它,您只能设置文件名
listBox1.Items.Add(Path.GetFileName(s));
但是,我建议在某处保存文件夹名称,因为如果您需要处理这些文件,则需要它。并且,猜猜看,Path还有一种从完整文件名中提取路径的方法
if(filenames.Length > 0)
string workingPath = Path.GetDirectoryName(filenames[0]);
修改强>
从下面的评论中,您可以多次调用此button_click,每次选择不同的文件夹。在这种情况下,从所选文件名中删除路径部分会使列表框中包含您无法检索的文件,因为您不知道路径部分(已剥离)。如果您需要检索选择执行某种过程的文件,那么您需要存储这些文件的完整路径,并能够对其进行检索。
您可以通过存储在List<string>
实例中选择的文件来实现此结果。
在全局级别声明一个变量来存储这些完整的文件名
(添加using System.Collection.Generic;
)
List<string> selectedFiles = new List<string>();
现在在按钮内部,单击将完整文件名添加到List<string>
,将剥离的文件添加到ListBox项目,顺序相同
private void button1_Click(object sender, EventArgs e)
{
panel3.Controls.Clear();
var ofd = new OpenFileDialog();
ofd.Multiselect = true;
ofd.Filter = "DICOM Files (*.dcm;*.dic)|*.dcm;*.dic|All Files (*.*)|*.*";
if (ofd.ShowDialog() == DialogResult.Cancel)
return;
foreach (string s in ofd.FileNames)
{
listBox1.Items.Add(Path.GetFileName(s));
selectedFiles.Add(s);
}
}
现在,如果要在列表框中检索所选文件的完整路径,可以使用
private void listBox1_SelectedIndexChanged(object sender, System.EventArgs e)
{
if(listBox1.SelectedIndex >= 0)
{
string fullFileName = selectedFiles[listBox1.SelectedIndex];
.... process the filename ....
}
}
答案 1 :(得分:0)
使用Path.GetFileName()
返回名称
请参阅http://msdn.microsoft.com/en-us/library/system.io.path.getfilename(v=vs.110).aspx