Directory.EnumerateFiles读取顺序

Dje*_*man 8 c# arrays indexing ienumerable file

Directory.EnumerateFiles方法的默认读取顺序是什么?它一致吗?

根据我的经验到目前为止,似乎是在文件创建之日,但我无法找到确认信息.

我问的原因是因为我正在处理的程序的一部分将二进制文件从目录加载到对象中,而这些对象又被加载到数组中.这些对象通过索引数组相互引用,这意味着它们加载到数组中的顺序需要保持一致(以避免转移索引).

我在这里时,还有另一个小问题.删除文件时,无论我做什么,它都会明显改变加载到数组中的文件的索引.有什么建议可以避免这个问题?由于担心存储问题,我之前一直避免使用字典(如果我可以避免存储,则宁愿不存储文本键数组)但如果这是唯一可行的方法,我可能还是要实现它.


编辑:在你的答案的优秀提示后,我已经使用文件的名称重构了字典方法.性能影响相当微不足道,可读性和可维护性都得到了极大的改善,因此效果非常好.

vcs*_*nes 14

.NET使用的底层Win32 API是FindFirstFileFindNextFile.该文件明确规定:

此函数返回文件名的顺序取决于文件系统类型.使用NTFS文件系统和CDFS文件系统时,名称通常按字母顺序返回.对于FAT文件系统,名称通常按文件写入磁盘的顺序返回,这可能是也可能不是按字母顺序排列.但是,如前所述,这些行为无法保证.

所以不,你不能保证文件的退货顺序.其他答案提供了解决此问题的充分方法.


Jon*_*eet 10

据我所知,它没有记录 - 因此即使你发现一个模式,你也不应该依赖它.它可能取决于.NET的版本或操作系统的版本,或者只是在服务包之间进行更改.相反,如果您需要某些特定订单,则应自行分类.当然,不幸的是,在处理它们之前需要找到所有文件名,但它会给你一致性.

说实话,听起来你的数据模型非常脆弱.你真的没有告诉我们有足够的了解你在做什么来修复它,但使用文件的整数索引的结果中Directory.EnumerateFiles肯定不是最好的方法.

如果您使用文件而不是索引,那么您可以在阅读时处理文件,但可能会有更好的方法,具体取决于您尝试做的事情.使用名称应该仍然相当便宜 - 它只是一个字符串引用而不是整数,即使它在多个地方使用,它将是对同一个字符串对象的几个引用.