这里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";
}
答案 0 :(得分:1)
虽然我担心大多数标准图书馆都不能加快速度,但显而易见的方法可以做得很快:
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";
}
是否快速可能取决于标准库优化分段迭代的算法。另一方面,由于读取存储器在高速缓存中是新鲜的并且仅被访问一次,因此即使没有任何分段优化,也很可能在下一个页面被容易读取之前处理每个页面。自从我对这种东西进行基准测试以来已经很久了......