从列表框项目中的路径获取文件名

时间:2014-06-04 07:07:52

标签: c#

我想减少路径的长度,只显示文件名。

例如,假设路径为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);
    }
}

2 个答案:

答案 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)