繁体   English   中英

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

[英]Get File Name from a Path in Listbox Item

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

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

System.IO namespace有一个名为Path的类。
在众多静态方法之间,您可以找到

 Path.GetFilename(string);

在添加循环中使用它只能设置文件名

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 ....
   }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM