文件未按顺序列出

本文关键字:顺序 文件 | 更新日期: 2023-09-27 18:32:04

>我正在使用StreamWriter类创建一堆按顺序命名的文件,从0到30。当我尝试循环读取它们时,当我比较两个文件时,0 与 10 进行比较,然后与 11 进行比较,依此类推,直到 19,然后 0 与 2 进行比较,然后 21 依此类推。有什么方法可以让它将 0 与 1 进行比较,然后与 2 进行比较,依此类推?我正在使用 Directory.GetFiles() 读取文件;

谢谢!

文件未按顺序列出

Directory.GetFiles();只返回一个字符串数组,因此很容易对它们进行重新排序

例如

       var files = Directory.GetFiles();
       var orderedFiles = files.OrderBy(s=>int.Parse( s));
        foreach (string s in orderedFiles)
        {
            Console.WriteLine(s);
        }

注意:您可能需要在调用 int 之前使用 Path.GetFileNameWithoutExtension。解析,您可能还想改用int.TryParse

请参阅 Directory.GetFiles() 上的 MSDN 页面。特别要注意这一点:

不保证返回文件名的顺序;如果需要特定的排序顺序,请使用 Sort() 方法。

您应该获取文件名并自己对其进行排序。

通常文件按名称顺序返回,但在这种情况下,顺序将是 0,1,11,12,...,2,20,21,...3等如果在 Windows 资源管理器中按名称排序,则可以看到此信息。正如其他人已经建议的那样,你最好的选择是用前导零填充。即 00、01、02、03、...、10、11、12 等。

这将为您解决问题。按创建时间排序

System.IO.DirectoryInfo di = new System.IO.DirectoryInfo("YourDirectoryPath");
System.IO.FileInfo[] files = di.GetFiles();
var sortedFiles = from f in files
                          orderby f.CreationTime ascending
                          select f;