Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.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#_File_Directory_Alphabetical Sort - Fatal编程技术网

C# 如何检索目录中按名称排序的文件列表

C# 如何检索目录中按名称排序的文件列表,c#,file,directory,alphabetical-sort,C#,File,Directory,Alphabetical Sort,我正在尝试从C#获取文件夹中所有文件的列表。很简单: Directory.GetFiles(folder) 但是我需要结果按字母顺序倒序排列,因为它们都是数字,我需要知道目录中的最高数字。当然,我可以将它们抓取到一个数组/列表对象中,然后进行排序,但我想知道是否有一些过滤器/参数 它们都以前导零命名。比如: 00000000001.log 00000000002.log 00000000003.log 00000000004.log .. 00000463245.log 00000853221

我正在尝试从C#获取文件夹中所有文件的列表。很简单:

Directory.GetFiles(folder)
但是我需要结果按字母顺序倒序排列,因为它们都是数字,我需要知道目录中的最高数字。当然,我可以将它们抓取到一个数组/列表对象中,然后进行排序,但我想知道是否有一些过滤器/参数

它们都以前导零命名。比如:

00000000001.log
00000000002.log
00000000003.log
00000000004.log
..
00000463245.log
00000853221.log
00024323767.log
最简单的方法是什么?我不需要获取其他文件,只需要“最大/最新”编号

(EnumerateFiles方法在.NET4中是新的,如果您使用的是早期版本,您仍然可以使用
GetFiles


编辑:如果使用在中定义的
MaxBy
方法,实际上不需要对文件名进行排序:


如果您真的是在追求最高的数字,并且这些日志文件的名称与您建议的相同,那么:

Directory.GetFiles(folder).Length

扩展@Thomas所说的,如果您只需要前X个文件,您可以这样做:

int x = 10;
var files = Directory.EnumerateFiles(folder)
                 .OrderByDescending(filename => filename)
                 .Take(x);

一个“.ToList()”将是完美的:D@Mat作为信仰者,为什么?这取决于你打算对结果做什么…对.NET4很有意思(我想我们运行的是3.5),但我想是和@yas4891一样的问题吧?在LINQ语法选择正确的项之前,每个文件名都会被拉入内存。我正在寻找目录对象的简单参数?这可能吗?@Thomas,因为您知道这适用于延迟执行,而且由于这是一个示例,而且问题的作者可能不是LINQ专家,所以这似乎可以避免他遇到问题。@BerggreenDK,不,Directory.GetFiles没有参数来指定顺序。EnumerateFiles惰性地生成文件名,因此它们不会一次全部加载到内存中。但是,OrderBy需要先加载所有内容,然后才能开始排序。。。相反,您可以使用中定义的MaxBy方法。查看我的更新答案好的,这看起来像LINQ语法,据我所知,它在选择之前仍然会将整个目录拉入内存?我正在搜索Directory命令本身的“filter”,因为我们可能在同一个目录中有相当多的文件,这个函数将被称为lot.Hmm。不如你再澄清一下你的帖子,告诉我们你最终想要实现什么?似乎您正在尝试“猜测”某个命名方案中的下一个有效整数-对吗?我想知道数字最大的文件名,以便添加更多日志或生成行中的下一个数字。是的,“猜下一个”是任务之一。正如我的问题所述,我不需要所有其他的列表。如果性能真的那么重要(您是否进行了基准测试?),您可能应该决定在内存中的某个位置存储最高的数字(即类成员/属性)。是的,这可能是另一种选择。但是我的问题是:.NET中是否有一个参数可以自动进行过滤,或者不可能得到文件的相反顺序。谢谢!这也非常有用。我想从文件夹/目录中获取每个文件。我的文件名包含一些ID\u documentt\u filename.docx。现在,我想用ID拆分此文件标题,并将其存储在表或内存中。如何实现这一点?var dir=newdirectoryinfo(@“D:\folder1”);foreach(dir.EnumerateFiles(“.”,SearchOption.AllDirectories)中的var singleFile){if(singleFile!=null&&singleFile.Length>0){
var files = from file in Directory.GetFiles(folder)    
               orderby file descending 
               select file;

var biggest = files.First();
Directory.GetFiles(folder).Length
int x = 10;
var files = Directory.EnumerateFiles(folder)
                 .OrderByDescending(filename => filename)
                 .Take(x);