C# 如何从C中存在的目录中获取文件名?
我想按Windows资源管理器中存在的顺序提取所有文件名。我在谷歌上搜索了很多答案,但都没有找到。我有一个按以下顺序排列的文件名:C# 如何从C中存在的目录中获取文件名?,c#,C#,我想按Windows资源管理器中存在的顺序提取所有文件名。我在谷歌上搜索了很多答案,但都没有找到。我有一个按以下顺序排列的文件名: video_1 video_2 video_3 video_10 video_15 video_20 video_21 我想要相同的顺序,但结果如下表所示 video_1 video_10 video_10 video_2 video_20 video_21 我尝试了以下代码: var fileNames= Directory.GetF
video_1
video_2
video_3
video_10
video_15
video_20
video_21
我想要相同的顺序,但结果如下表所示
video_1
video_10
video_10
video_2
video_20
video_21
我尝试了以下代码:
var fileNames= Directory.GetFiles(basePath, "*" + fileExtension) //Not worked
DirectoryInfo info = new DirectoryInfo(basePath);
var filenames = info.GetFiles().OrderBy(p => p.CreationTIme).ToArray(); //Not worked
有人能告诉我怎么做吗?顺序不正确的原因是名称是字符串,因此按字符串排序。您需要的是按其数字部分排序:
DirectoryInfo info = new DirectoryInfo("");
var files = info.GetFiles()
.OrderBy(p => p.FullName.Split('_')[0])
.ThenBy(p => int.Parse(p.FullName.Split('_')[1]));
如果您不确定格式是否与u和有效数字完全相同,则可以:
Func<string, int, int> parseIntOrDefault = (input, defaultValue) =>
{
int value = defaultValue;
int.TryParse(input, out value);
return value;
};
var result = from file in info.GetFiles()
let sections = file.FullName.Split('_')
orderby sections[0], sections.Length == 2 ?
parseIntOrDefault(sections[1], int.MaxValue) : int.MaxValue
select file;
OrderByp=>p.CreationTIme在按创建时间排序时不起作用。。尝试使用filename对它们进行排序..filename也不能working@Steve-这可能是一个重复的问题,但不是您最后提出的问题。这是为VB.Net设计的,因此不是一个精确的dup。将在C中搜索以查找答案答案。答案在C和VB.NET中。但我要说的是,你的解决方案更快。实际上,特殊字符阻塞了所需的顺序。所以试试这个DirectoryInfo=newdirectoryinfo;var files=info.GetFiles.OrderByp=>p.FullName.toString;如果@Umer想要像文件系统那样排序,我认为这将是对他的问题的更合适的答案。实际问题包含我认为他应该使用的代码。虽然他们对你的答案没有错,但如果他改变他的格式,它就不会继续工作。@MaxYoung它对我有用。最后请写下这个评论作为答案,这样我可以标记它,其他人可以从中获得帮助it@Umer既然复制件被接受了,我就不能。我只想对那个问题投赞成票。很高兴它对你有用。再次谢谢你,伙计。