Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从C中存在的目录中获取文件名?_C# - Fatal编程技术网

C# 如何从C中存在的目录中获取文件名?

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

我想按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.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既然复制件被接受了,我就不能。我只想对那个问题投赞成票。很高兴它对你有用。再次谢谢你,伙计。