比较两个文件是否相同的办法

比较,两个,文件,是否,相同,办法 · 浏览次数 : 22

小编点评

```c++ #include #include #include #include #include #include #include const int MAX_LEN = 200; bool isSameFile(const char s1[], const char s2[]) { int fd1 = open(s1, O_RDONLY); int fd2 = open(s2, O_RDONLY); if (fd1 == -1 || fd2 == -1) { std::cerr << "An error happened!\\"; close(fd1); close(fd2); return false; } struct stat stat1, stat2; if (fstat(fd1, &stat1) == -1 || fstat(fd2, &stat2) == -1) { std::cerr << "Error getting file stats.\\"; close(fd1); close(fd2); return false; } if (stat1.st_size != stat2.st_size) { close(fd1); close(fd2); return false; } char* map1 = static_cast(!mmap(nullptr, stat1.st_size, PROT_READ, MAP_PRIVATE, fd1, 0)); char* map2 = static_cast(!mmap(nullptr, stat2.st_size, PROT_READ, MAP_PRIVATE, fd2, 0)); if (map1 == MAP_FAILED || map2 == MAP_FAILED) { std::cerr << "Error mapping files to memory.\\"; close(fd1); close(fd2); return false; } bool result = (memcmp(map1, map2, stat1.st_size) == 0); munmap(map1, stat1.st_size); munmap(map2, stat2.st_size); close(fd1); close(fd2); return result; } int main() { char ch1[MAX_LEN], ch2[MAX_LEN]; std::cin >> ch1 >> ch2; std::cout << std::boolalpha; std::cout << isSameFile(ch1, ch2); return 0; } ```

正文

  原本是朴素的遍历写法,后面改为mmap后速度提升飞快(大部分时候一秒以内可以出结果)。可以用于比较两个文件内容是否相同,包括图片也可以(图片用open函数打开后是一堆乱码,相当于比较乱码)。Talk is cheap, show me your code。

 

#include <iostream>
#include <fstream>
#include <cstring>
#include <sys/mman.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

const int MAX_LEN = 200;

bool isSameFile(const char s1[], const char s2[]) {
    int fd1 = open(s1, O_RDONLY);
    int fd2 = open(s2, O_RDONLY);

    if (fd1 == -1 || fd2 == -1) {
        std::cerr << "An error happend!\n";
        close(fd1);
        close(fd2);
        return false;
    }

    struct stat stat1, stat2;
    if (fstat(fd1, &stat1) == -1 || fstat(fd2, &stat2) == -1) {
        std::cerr << "Error getting file stats.\n";
        close(fd1);
        close(fd2);
        return false;
    }

    if (stat1.st_size != stat2.st_size) {
        close(fd1);
        close(fd2);
        return false;
    }

    char* map1 = static_cast<char*>(mmap(nullptr, stat1.st_size, PROT_READ, MAP_PRIVATE, fd1, 0));
    char* map2 = static_cast<char*>(mmap(nullptr, stat2.st_size, PROT_READ, MAP_PRIVATE, fd2, 0));

    if (map1 == MAP_FAILED || map2 == MAP_FAILED) {
        std::cerr << "Error mapping files to memory.\n";
        close(fd1);
        close(fd2);
        return false;
    }
    bool result = (memcmp(map1, map2, stat1.st_size) == 0);

    munmap(map1, stat1.st_size);
    munmap(map2, stat2.st_size);
    close(fd1);
    close(fd2);

    return result;
}

int main() {
    char ch1[MAX_LEN], ch2[MAX_LEN];
    std::cin >> ch1 >> ch2;
    std::cout << std::boolalpha;
    std::cout << isSameFile(ch1, ch2);  
}

 

与比较两个文件是否相同的办法相似的内容:

比较两个文件是否相同的办法

原本是朴素的遍历写法,后面改为mmap后速度提升飞快(大部分时候一秒以内可以出结果)。可以用于比较两个文件内容是否相同,包括图片也可以(图片用open函数打开后是一堆乱码,相当于比较乱码)。Talk is cheap, show me your code。 #include #

Langchain 与 LlamaIndex:LLM 应用开发框架的比较与使用建议

Langchain 和 Llamaindex 是两种广泛使用的主流 LLM 应用开发框架。两者有什么不同?我们该如何使用?以下我根据各类资料和相关文档做了初步选型。 一、Langchain 1. 适用场景 (1)需要构建灵活、可扩展的通用应用程序。 (2)需要复杂的工作流程支持。 (3)需要复杂的交

[转帖]IDM UltraCompare Professional 22.10.0.3破解版

https://www.ittel.cn/archives/7834.html IDM UltraCompare Professional破解版是功能强大的文件比较/合并工具,提供一系列的文件、文本文档、文件夹等的对比比较,轻松获得准确的报告,支持对比压缩文件和jar文件,支持两个以及三个文件比较,

LiveCharts2:简单灵活交互式且功能强大的.NET图表库

前言 之前的文章中提到过ScottPlot、与oxyplot,这两个是比较常用的.NET图表库,今天介绍一款新的.NET图表库:LiveCharts2。 LiveCharts2介绍 LiveCharts2 是一个现代化的数据可视化库,用于创建动态和交互式图表,支持 .NET 平台。它是 LiveCh

基于.NetCore开发博客项目 StarBlog - (25) 图片接口与文件上传

## 前言 上传文件的接口设计有两种风格,一种是整个项目只设置一个接口用来上传,然后其他需要用到文件的地方,都只存一个引用ID;另一种是每个需要文件的地方单独管理各自的文件。这俩各有优劣吧,本项目中选择的是后者的风格,文章图片和照片模块又要能CRUD又要批量导入,还是各自管理文件比较好。 ## 图片

MindSpore反向传播配置关键字参数

继上一篇文章从Torch的两个Issue中找到一些类似的问题之后,可以发现深度学习框架对于自定义反向传播函数中的传参还是比较依赖于必备参数,而不是关键字参数,MindSpore深度学习框架也是如此。但是我们可以使用一些临时的解决方案,对此问题进行一定程度上的规避,只要能够自定义的传参顺序传入关键字参...

前端下载文件的方式

概要 在前端下载文件是个很通用的需求,一般后端会提供下载的方式有两种: 直接返回文件的网络地址(一般用在静态文件上,比如图片以及各种音视频资源等) 返回文件流(一般用在动态文件上,比如根据前端选择,导出不同的统计结果 excel 等) 第一种方式比较简单,但是使用场景有限。第二种方式通用性更好,最近

SQLSERVER 事务日志的 LSN 到底是什么?

一:背景 1. 讲故事 大家都知道数据库应用程序 它天生需要围绕着数据文件打转,诸如包含数据的 .mdf,事务日志的 .ldf,很多时候深入了解这两类文件的合成原理,差不多对数据库就能理解一半了,关于 .mdf 的合成前面的文章已经有所介绍,这篇我们来聊一下 .ldf 的一些内部知识,比如 LSN。

ElasticSearch 实现分词全文检索 - Scroll 深分页

ES 对 from + size 有限制,两者之和不能超过1W Scroll查询方式,不适合做实时的查询,每次都是从数据文档中的ID去获取,效果高了,但文档中的ID(第二步)不是实时更新的,一般后台管理的方式用 Scroll 比较方便

[转帖]Syncthing文件同步方案完全攻略(亲测有效)

云同步方案有很多种,比如 Seafile 和 Nextcloud,这两者都是正儿八经的云盘,功能多,体型庞大,部署起来很麻烦,如果应用场景仅仅是需要同步一下公司电脑和家里电脑的文档,犯不上用这两者。 Syncthing不是云盘,它就是一个同步器,可以让你在公司没干完的活同步到家里的电脑里继续完成,假