我想用 C++ 在文件系统中查找重复文件。有没有算法可以尽快做到这一点?我是否需要创建一个多线程应用程序,或者我可以只使用一个线程来完成它?
最佳答案
我同意 Kerrek SB 的观点,有比 C++ 更好的工具,但是,假设您确实需要在 C++ 中执行此操作,这里有一些建议和在您的实现中需要考虑的事项:
使用 boost::filesystem 进行可移植的文件系统遍历
散列每个文件的建议非常合理,但首先制作一个以文件大小为关键的 multimap 可能更有效。然后仅在存在重复大小的文件时应用哈希。
决定如何处理空文件和符号链接(symbolic link)/快捷方式
确定您希望如何处理特殊文件,例如在 unix 上你有目录 fifos、sockets 等
考虑到文件或目录结构在您的算法运行时可能会更改、消失或移动
考虑到某些文件或目录可能无法访问或损坏(例如递归目录链接)
使线程数可配置,因为有意义的并行化量取决于底层磁盘硬件和配置。如果您使用的是简单的硬盘驱动器而不是昂贵的 san,情况会有所不同。但是,不要做出假设;测试一下。例如,Linux 非常擅长缓存文件,因此您的许多读取都来自内存,因此不会阻塞 i/o。
关于c++ - 在 C++ 中查找重复文件的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11760420/