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