Directory.EnumerateFiles
方法的默认读取顺序是什么?它一致吗?Directory.EnumerateFiles读取顺序(C#)
根据我的经验,迄今为止似乎是创建文件的日期,但我一直未能找到确认。
我想问的原因是因为我正在处理的程序的一部分将二进制文件从目录加载到对象中,然后将这些对象加载到数组中。这些对象通过索引数组相互引用,这意味着它们加载到数组中的顺序需要保持一致(以避免索引转换)。
虽然我在这里,我还有一个小问题。当文件被删除时,无论我做什么,它都会明显改变加载到数组中的文件的索引。有什么建议可以避免这个问题?由于担心存储问题,我避免使用字典(如果我可以避免的话,不用存储文本键的数组),但如果它是唯一可行的方法,那么我可能必须实现它。
编辑:从你的答案极好的提示后,我已经重构使用文件名的字典方法。性能影响相当可忽略,可读性和可维护性都大大提高,因此工作得很好。
为什么不只是保留一个引用而不是索引?如果你这样做,你不必担心索引被洗牌。 – casperOne
由于文件序列化的工作方式。如果我要通过序列化保存包含引用的文件,然后加载这些文件,每次都会加载整个对象树,导致大量复制。例如,如果汽车引用轮胎和卡车引用轮胎,并且他们都被保存然后加载,我会有2个重复的轮胎实例。 – Djentleman
来自[MSDN](http://msdn.microsoft.com/en-us/library/07wt70x2.aspx),关于'GetFiles'(本质上调用'EnumerateFiles'):*返回的文件名的顺序是不保证;如果需要特定的排序顺序,请使用Sort()方法。*我建议您,如文档所述,使用您自己的排序方法。 – Mir