为了账号安全,请及时绑定邮箱和手机立即绑定

排序Directory.GetFiles()

排序Directory.GetFiles()

手掌心 2019-10-18 10:47:00
System.IO.Directory.GetFiles()返回string[]。返回值的默认排序顺序是什么?我是按名称假设,但是如果是这样的话,当前的文化会对它产生多大影响?您可以将其更改为创建日期吗?更新: MSDN指出,不能保证.Net 3.5的排序顺序,但是该页面的2.0版本完全没有说明任何内容,而且两个页面都无法帮助您按创建或修改时间进行排序。一旦拥有数组(仅包含字符串),该信息就会丢失。我可以构建一个比较器,以检查它获取的每个文件,但这意味着在假定.GetFiles()方法已经执行此操作时,将重复访问文件系统。似乎效率很低。
查看完整描述

3 回答

?
慕工程0101907

TA贡献1887条经验 获得超5个赞

如果您对文件的属性(例如CreationTime)感兴趣,那么使用System.IO.DirectoryInfo.GetFileSystemInfos()会更有意义。然后,可以使用System.Linq中的一种扩展方法对它们进行排序,例如:


DirectoryInfo di = new DirectoryInfo("C:\\");

FileSystemInfo[] files = di.GetFileSystemInfos();

var orderedFiles = files.OrderBy(f => f.CreationTime);

编辑-抱歉,我没有注意到.NET2.0标签,因此请忽略LINQ排序。虽然仍然保留使用System.IO.DirectoryInfo.GetFileSystemInfos()的建议。


查看完整回答
反对 回复 2019-10-18
?
12345678_0001

TA贡献1802条经验 获得超5个赞

在.NET 2.0中,您需要使用Array.Sort对FileSystemInfos进行排序。


另外,您可以使用Comparer委托来避免只为比较而声明一个类:


DirectoryInfo dir = new DirectoryInfo(path);

FileSystemInfo[] files = dir.GetFileSystemInfos();


// sort them by creation time

Array.Sort<FileSystemInfo>(files, delegate(FileSystemInfo a, FileSystemInfo b)

                                    {

                                        return a.LastWriteTime.CompareTo(b.LastWriteTime);

                                    });


查看完整回答
反对 回复 2019-10-18
  • 3 回答
  • 0 关注
  • 1549 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信