在http://www.cplusplus.com/forum/general/94032/中,我找到了一种很棒的快速方法来按字节比较两个文件。但是它具有增强的依赖性。我现在正在使用Qt开发程序。纯Qt中是否有类似的优雅和/或相对较快的方式?还是有其他算法可以比较Qt中的两个文件?我不坚持使用内存映射...
这是增强版:
#include <iostream>
#include <algorithm>
#include <boost/iostreams/device/mapped_file.hpp>
namespace io = boost::iostreams;
int main()
{
io::mapped_file_source f1("test.1");
io::mapped_file_source f2("test.2");
if(f1.size() == f2.size() && std::equal(f1.data(), f1.data() + f1.size(), f2.data()))
std::cout << "The files are equal\n";
else
std::cout << "The files are not equal\n";
}
最佳答案
尽管我担心大多数标准库都不会很快,但显而易见的方法可以很快实现:
std::locale::global(std::locale::classic());
std::ifstream f1("test.1");
std::ifstream f2("test.2");
typedef std::istreambuf_iterator isbuf_it;
if (std::equal(isbuf_it(f1.rdbuf()), isbuf_it(),
isbuf_it(f2.rdbuf()), isbuf_it())) {
std::cout << "The files are equal\n";
}
else {
std::cout << "The files are not equal\n";
}
是否快速可能取决于优化用于分段迭代的算法的标准库。另一方面,由于读取的存储器在高速缓存中是新鲜的并且仅被访问一次,因此即使没有任何分段优化,也很有可能在容易读取下一页之前处理每个页面。自从我对这类东西进行基准测试以来已经很久了...