逐字节比较两个文件

comparing two files byte-wise

本文关键字:两个 文件 字节 比较      更新时间:2023-10-16

在这里 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 equaln";
    else
        std::cout << "The files are not equaln";
}

显而易见的方法可以快速制作,尽管我担心大多数标准库不会快速制作:

std::locale::global(std::locale::classic());
std::ifstream f1("test.1");
std::ifstream f2("test.2");
typedef std::istreambuf_iterator<char> isbuf_it;
if (std::equal(isbuf_it(f1.rdbuf()), isbuf_it(),
               isbuf_it(f2.rdbuf()), isbuf_it())) {
    std::cout << "The files are equaln";
}
else {
    std::cout << "The files are not equaln";
}

这是否快可能取决于标准库优化分段迭代的算法。另一方面,由于读取内存在缓存中是最新的,并且只访问一次,因此即使没有任何分段优化,也很有可能在下一个页面易于读取之前处理每个页面。我已经很久没有对这种东西进行基准测试了......