【发布时间】:2012-12-15 08:34:14
【问题描述】:
Directory.EnumerateFiles 方法的默认读取顺序是什么?是否一致?
根据我目前的经验,它似乎是在创建文件的日期之前,但我无法找到对此的确认。
我问的原因是因为我正在处理的程序的一部分将二进制文件从目录加载到对象中,然后再加载到数组中。这些对象通过索引数组相互引用,这意味着它们加载到数组中的顺序需要保持一致(以避免移动索引)。
在这里,我还有一个小问题。当文件被删除时,无论我做什么,它显然都会改变加载到数组中的文件的索引。有什么建议可以避免这个问题吗?到目前为止,由于担心存储问题,我一直避免使用字典(如果可以避免的话,我宁愿不存储文本键数组),但如果这是唯一可行的方法,我可能还是必须实现它。
编辑:在您的回答中获得出色提示后,我使用文件名重构为字典方法。性能影响几乎可以忽略不计,可读性和可维护性都得到了极大的改善,因此效果很好。
【问题讨论】:
-
为什么不只保留参考而不是索引?如果您这样做,您就不必担心索引会被打乱。
-
因为文件序列化的工作方式。如果我要通过序列化保存包含引用的文件,然后加载这些文件,那么我每次都会加载整个对象树,从而导致大量重复。例如,如果 Car 引用 Tire 和 Truck 引用 Tire,并且它们都被保存然后加载,我将有 2 个重复的 Tire 实例。
-
取自MSDN,约
GetFiles(本质上调用EnumerateFiles): 不保证返回文件名的顺序;如果需要特定的排序顺序,请使用 Sort() 方法。 如文档所述,我建议您使用自己的排序方法。
标签: c# arrays file indexing ienumerable