在一个孤立的环境中,我使用 .EML 到 .MSG 文件转换器ReliefJet Essentials来转换大型文件存储库(数十万个),保持目录结构完整 - 从每个字母的文件夹开始,然后去从那里更深。
转换软件不会提供每个已完成文件的日志(谢天谢地),但会保留所有失败文件的错误日志,这让我对它所采用的路径有所了解。
让我感到困惑的是没有按字母顺序排列文件夹。错误日志报告文件夹按以下顺序转换:
D, N, P, C, I, S, M, G, T, V, B, O, E, Q, A, U, R, F, L
甚至出现在该列表中的子文件夹也是乱序出现的。例如,在 下B
,文件夹已出席(为保护隐私而被截断):
BLA, BD, BRE, BAL, BRA, BEL, BLU
我更正了一些有问题的文件并再次运行转换请求,跳过现有文件。日志以完全相同的顺序返回任何错误,这让我认为这不是“随机选择”而是固定顺序。
我想知道的是这个订单是如何达成的。它似乎不基于文件夹大小或文件数量,因为这两个值:
N
小于D
L
大小与D
P
大于N
,D
并且L
合并
是否有任何排序方法可以解释为什么该实用程序以这种非字母顺序选择文件夹,这看起来很随意但可以重复和重现?
这可能是在磁盘上找到文件和文件夹的顺序。
假设您在磁盘上创建了一个文件夹
然后,一段时间后,您创建另一个文件夹
Yes
Folder B
按字母顺序排在 J 之前,但 is 是在 J 之后创建的。目录列表就是目录中内容的列表,将项目附加到该列表比读取整个列表、通过某种任意算法对其排序然后将列表写回磁盘要简单得多.
就将项目添加到该目录而言,如果您每次都对其进行排序,则将项目添加到该目录会非常慢,事实上,您可以通过向目录添加大量零字节文件的简单操作来削弱机器,即使文件名是连续的,它也必须每次都通过对它们进行排序来检查。
即使重命名大目录中的文件也可能非常慢,因为它会触发对文件夹的排序操作。
因此,每次都将一个项目简单地附加到列表中。没有分类,什么都没有。只是追加和关闭。
如果你想要一个排序列表,那么你可以扫描目录并排序你自己的列表。在该目录的整个生命周期中,程序对其进行排序可能会更快,但与每次写入或重命名文件时执行此操作所带来的性能损失相比,这个问题是微不足道的。
因此,您可能看到的是目录或文件添加到目录的顺序,而不是排序列表。
您的程序不关心“文件管理”。它只关心这些文件的内容,并确保它贯穿整个列表。
它是随意的,但同时它是可重复的,因为这是将名称写入文件夹列表的顺序。
它看起来是随机的,但实际上不是。