文件未按顺序列出

时间:2012-04-24 18:04:28

标签: c# directory

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

读取文件

谢谢!

3 个答案:

答案 0 :(得分:3)

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

e.g。

       var files = Directory.GetFiles();
       var orderedFiles = files.OrderBy(s=>int.Parse( s));

        foreach (string s in orderedFiles)
        {
            Console.WriteLine(s);
        }

注意:在调用int.Parse之前,您可能需要使用Path.GetFileNameWithoutExtension,而您可能还想使用int.TryParse

答案 1 :(得分:2)

请参阅MSDN page on Directory.GetFiles()。特别注意这一点:

  

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

您应该获取文件名并自行排序。

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

答案 2 :(得分:2)

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

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;
相关问题