0

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

谢谢!

4

3 回答 3

3

Directory.GetFiles();只返回一个字符串数组,所以很容易重新排序它们

例如

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

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

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

于 2012-04-24T18:18:14.520 回答
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;
于 2012-04-24T18:32:14.020 回答
2

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

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

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

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

于 2012-04-24T18:15:42.290 回答