我在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
但是,列表中的每个值都将返回完整路径和名称 任何有关此主题的帮助将不胜感激。提前致谢。
答案 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());
}