c++ - 在 C++ 中查找重复文件的最佳方法是什么?

标签 c++ algorithm file

我想用 C++ 在文件系统中查找重复文件。有没有算法可以尽快做到这一点?我是否需要创建一个多线程应用程序,或者我可以只使用一个线程来完成它?

最佳答案

我同意 Kerrek SB 的观点,有比 C++ 更好的工具,但是,假设您确实需要在 C++ 中执行此操作,这里有一些建议和在您的实现中需要考虑的事项:

  1. 使用 boost::filesystem 进行可移植的文件系统遍历

  2. 散列每个文件的建议非常合理,但首先制作一个以文件大小为关键的 multimap 可能更有效。然后仅在存在重复大小的文件时应用哈希。

  3. 决定如何处理空文件和符号链接(symbolic link)/快捷方式

  4. 确定您希望如何处理特殊文件,例如在 unix 上你有目录 fifos、sockets 等

  5. 考虑到文件或目录结构在您的算法运行时可能会更改、消失或移动

  6. 考虑到某些文件或目录可能无法访问或损坏(例如递归目录链接)

  7. 使线程数可配置,因为有意义的并行化量取决于底层磁盘硬件和配置。如果您使用的是简单的硬盘驱动器而不是昂贵的 san,情况会有所不同。但是,不要做出假设;测试一下。例如,Linux 非常擅长缓存文件,因此您的许多读取都来自内存,因此不会阻塞 i/o。

关于c++ - 在 C++ 中查找重复文件的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11760420/

相关文章:

c++ - n>0 的 Sleep(n) 是否会将 CPU 时间让给其他线程

algorithm - 找到一个巨大的整数集的最大子集

algorithm - 如何计算DFS算法的时间复杂度?

java - 文件操作库

c++ - 将 "this"称为 shared_ptr?

c++ - 编译器不编译以下行 (C++)

C++ 如何管理依赖项(例如使用来自 github 的库)

c# - 获取日期范围内的季节

java - android 文件中存储字符串与字节数组的文件大小不同

file - 如何删除文件?