隐藏文件路径,仅显示文件名

时间:2014-10-02 21:56:24

标签: c# combobox filepath

我在C#工作。我有一段代码返回文件以及特定文件类型的路径,并将它们放在选择列表中

private void Form1_Load(object sender, EventArgs e)
    {
        // Only get .sde files  
        string[] dirs = System.IO.Directory.GetFiles(@"c:\Users\JohnDoe\Desktop\my_files", "*.sde");
        this.GetSdePath.Items.AddRange(dirs);
    }

当我运行程序时,选择列表包含所有sde文件。它们如下列出/显示:

C:\ Users \用户JOHNDOE \桌面\ my_files \ NewCreated.sde
C:\用户\ JOHNDOE \桌面\ my_files \ Inventory.sde
C:\用户\ JOHNDOE \桌面\ my_files \ Surplus.sde
C:\ Users \用户JOHNDOE \桌面\ my_files \ Logistics.sde

我想知道在我的选择列表中是否可以隐藏路径并只显示sde文件的名称。所以列表看起来像

NewCreated.sde
Inventory.sde
Surplus.sde
Logistics.sde

但是,列表中的每个值都将返回完整路径和名称 任何有关此主题的帮助将不胜感激。提前致谢。

2 个答案:

答案 0 :(得分:1)

在返回的序列上使用Select以应用仅从完整路径中提取文件名的Path.GetFileName方法

var dirs = System.IO.Directory.GetFiles(@"c:\Users\JohnDoe\Desktop\my_files", "*.sde")
                              .Select (d => Path.GetFileName(d));
this.GetSdePath.Items.AddRange(dirs.ToArray());

我不知道您的文件夹中有多少文件,但最好使用EnumerateFiles代替GetFiles

var dirs = System.IO.Directory.EnumerateFiles(@"c:\Users\JohnDoe\Desktop\my_files", "*.sde")
                              .Select (d => Path.GetFileName(d));

MSDN说

  

EnumerateFiles和GetFiles方法的区别如下:当你   使用EnumerateFiles,您可以开始枚举名称集合   在整个收藏品归还之前;当你使用GetFiles时,你   必须等待返回整个名称数组才能返回   访问数组。因此,当您使用许多文件和   目录,EnumerateFiles可以更有效。

修改
在下面的评论之后,无法选择EnumerateFiles(可从.NET 4.0获得),如果您想保留其他任务的完整路径名,但只显示列表框中的文件名,那么您需要将其保留在某种集合中(数组或更好的列表)

 using System.IO;
 ...

 string sourcePath = @"c:\Users\JohnDoe\Desktop\my_files";
 List<string> dirs = Directory.GetFiles(sourcePath, "*.sde")
                              .Select (d => Path.GetFileName(d)
                              .ToList());
 this.GetSdePath.Items.AddRange(dirs.ToArray());
                              ;

如果您需要Form_Load事件之外的内容

,请将List<string>dirs设为表单级变量

答案 1 :(得分:1)

使用Path.GetFileName(string path)

private void Form1_Load(object sender, EventArgs e)
    {
        // Only get .sde files  
        string[] dirs = System.IO.Directory.GetFiles(@"c:\Users\JohnDoe\Desktop\my_files", "*.sde");
        this.GetSdePath.Items.AddRange(dirs.Select(path => Path.GetFileName(path).ToArray());
    }