比较C++中的两个文件
Comparing two files in C++
我有一个函数,可以比较两个文件,看看它们是否相同。它逐字节读取文件,并检查它们是否相同
我现在遇到的问题是,对于大文件,这个函数需要相当长的时间。
检查文件是否相同的更好、更快的方法是什么?
当您的文件不相同时,它们可能具有相同的大小吗?如果不是,您可以立即确定文件大小(fseek到末尾,ftell确定位置),如果它们不同,则在不比较数据的情况下就知道它们不一样。如果大小相同,请记得从头开始。
如果您将文件读取到内存的大缓冲区中,并使用memcmp()比较每个缓冲区,您将提高性能。您不必一次读取整个文件,只需设置一个大的缓冲区大小,并从每个文件中读取该大小的块,用于循环中的每个比较迭代。memcpy函数将对32位值进行操作,而不是对8位字节进行操作。
如果您真的想要对两个文件进行强力比较,mmaping可能会有所帮助。
如果你知道你正在阅读的文件结构,请阅读独特的部分,这样你就可以快速识别它们(例如标题和相关的块/部分)。当然,在进行比较之前,您需要了解它的基本属性。
如果进行多次比较,则生成散列(或其他内容)。
以X大小的块读取文件。X大小可达1-10-50兆字节。在这些块上使用memcmp()
。
虽然有很多使用SHA或MD5的加密哈希函数的例子,但对于文件比较,最好使用非加密哈希,因为它会更快:
https://en.wikipedia.org/wiki/List_of_hash_functions#Non-密码散列函数
FNV哈希被认为可以快速满足您的需求:
https://en.wikipedia.org/wiki/Fowler_Noll_Vo_hash
如果您不熟悉在谷歌上搜索有关"MD5"或"SHA"算法的哈希。哈希是检查文件一致性的有效方法之一。你只需要找到其中一个算法的实现并检查它们;例如:
if(md5(file1Path) == md5(file2Path))
cout<<"Files are equal"<<endl;
else
cout<<"Files are not equal"<<endl;
- 两个文件使用彼此的功能-如何解决
- 结构包含在两个头文件中,这两个文件我都不拥有
- Levenshtein 两个文件的距离花费了太多时间
- 如何在c ++中以一行(水平)打印两个文件的数据?如给定的.这两种形式来自两个不同的文本文件
- 包括两个文件 C++ 之间的冲突
- 如何检测两个文件条目是否引用与Qt相同的物理文件系统?
- 比较两个文件夹的关系
- 连接两个文件时如何避免冗余尾随换行符?
- 在循环工作时,首先将两个文件读为向量,但仅次于迭代一次
- 比较两个文件中的两个中间人的最佳方法.C++
- 同时逐行阅读两个文件
- 包含两个C++文件的制作文件:如何选择要编译的文件
- 在 c++ 中对两个文件使用标头
- 同时阅读两个文件
- 如何连接两个文件夹/项目的生成文件,这两个文件夹/项目必须一起运行且独立运行
- 从其他两个文件中创建一个分类整数的文件
- C 程序处理两个文件,而不是一个文件
- 知道分割故障在哪里比较两个文件
- 如何计算两个文件中字符单词和行的总数,并将它们相加以得出总数
- 将相同数据写入两个文件的有效方法