我目前需要重命名一个文件夹中的所有文件。文件不改变名称的可能性很小,旧文件名与新文件名相同的可能性相当大,这使得重命名冲突很可能发生。
因此,简单地循环文件并将旧名称重命名为新名称不是一个选项。
简单/明显的解决方案是将所有内容重命名为临时文件名:旧名称->tempX->新名称。当然,这在某种程度上转移了问题,因为现在有责任检查旧名称列表中的任何内容是否与临时名称列表重叠,并且临时名称列表中的任何内容是否与新列表重叠。
此外,由于我正在处理缓慢的媒体和喜欢减慢事情速度的病毒扫描器,我希望最小化磁盘上的实际操作。除此之外,用户会不耐烦地等待做更多的事情。因此,如果可能的话,我想一次性处理磁盘上的所有文件(通过智能地重新排序重命名操作),并避免指数时间花费。
这最后一点让我想到了一个“足够好”的解决方案,即首先在我的目录中创建一个临时目录,将所有内容移动-重命名到该目录中,最后将所有内容移动回旧文件夹并删除临时目录。这给我带来了O(2n)的磁盘和操作复杂度。
如果可能的话,即使以增加内存操作的O(99999n)为代价,我也希望将磁盘上的复杂性提高到O(n)。毕竟,内存速度更快。
我个人在图论方面不是很精通,并且我怀疑整个“重命名冲突”问题以前已经得到解决,因此我希望有人可以指向一个满足我的需求的算法。(是的,我可以尝试自己编写,但我不够聪明,可能会留下逻辑错误,这些错误很少发生,以至于它们可以通过我的测试。xD)
因此,简单地循环文件并将旧名称重命名为新名称不是一个选项。
简单/明显的解决方案是将所有内容重命名为临时文件名:旧名称->tempX->新名称。当然,这在某种程度上转移了问题,因为现在有责任检查旧名称列表中的任何内容是否与临时名称列表重叠,并且临时名称列表中的任何内容是否与新列表重叠。
此外,由于我正在处理缓慢的媒体和喜欢减慢事情速度的病毒扫描器,我希望最小化磁盘上的实际操作。除此之外,用户会不耐烦地等待做更多的事情。因此,如果可能的话,我想一次性处理磁盘上的所有文件(通过智能地重新排序重命名操作),并避免指数时间花费。
这最后一点让我想到了一个“足够好”的解决方案,即首先在我的目录中创建一个临时目录,将所有内容移动-重命名到该目录中,最后将所有内容移动回旧文件夹并删除临时目录。这给我带来了O(2n)的磁盘和操作复杂度。
如果可能的话,即使以增加内存操作的O(99999n)为代价,我也希望将磁盘上的复杂性提高到O(n)。毕竟,内存速度更快。
我个人在图论方面不是很精通,并且我怀疑整个“重命名冲突”问题以前已经得到解决,因此我希望有人可以指向一个满足我的需求的算法。(是的,我可以尝试自己编写,但我不够聪明,可能会留下逻辑错误,这些错误很少发生,以至于它们可以通过我的测试。xD)