作为一个OIer,装逼的本事是必不可少的。最近,为了展示自己CPP水平,为同学们做了一个Cena(当然,命令行界面,很迷你)。但是,却在文件对比这个最重要的环节卡住了。

我想了很多办法,首先想到的就是向C++的各种库里要文件对比函数,但是无论怎么翻,都没有。既然装逼,那么我就想到了一个看起来深奥的解决方法:MD5对比。但是,文件一大,如一些矩阵输出什么的。它运行起来就一卡一卡的(下次装逼时卡了怎么办),于是还是想个更好的办法。

在这里,我体会到了,最笨的办法却恰恰是最有用的。我用两个ifstream变量,以二进制方法打开,首先比较两文件的长度,不等直接返回FALSE。如果相等,则拷贝到内存中。由于输出错误后,大小很难与正确答案相等,所以这个算法在大多数数据下是最优的。即使答案是AC的,输出也不会大到一种程度,所以没有卡顿现象。

现在上程序,首先看函数:

bool compfile(ifstream& in1, ifstream& in2){
ifstream::pos_type size1, size2;
size1 = in1.seekg(, ifstream::end).tellg();
in1.seekg(, ifstream::beg);
size2 = in2.seekg(, ifstream::end).tellg();
in2.seekg(, ifstream::beg);
if(size1 != size2)
return false;
size_t remaining = size1;//or size2
while(remaining)
{
char buffer1[BLOCKSIZE], buffer2[BLOCKSIZE];//BOLCKSIZE=4096
size_t size = min(BLOCKSIZE, remaining);
in1.read(buffer1, size);
in2.read(buffer2, size);
if( != memcmp(buffer1, buffer2, size))
return false;
remaining -= size;
}
return true;
}

以引用形式读入两个参数,以节省速度。size1,size2表示两个文件的大小。如果不等了,直接返回FALSE。若相等,即开始比对,一个块的大小(BLOCKSIZE)被设置为4096字节。比对的字节从remaining中减去,直到remaining为0。如果真的不等,才返回true。

C++文件逐字节对比的更多相关文章

  1. Java ftp上传文件方法效率对比

    Java ftp上传文件方法效率对比 一.功能简介: txt文件采用ftp方式从windows传输到Linux系统: 二.ftp实现方法 (1)方法一:采用二进制流传输,设置缓冲区,速度快,50M的t ...

  2. Shell 命令行求两个文件每行对比的相同内容

    Shell 命令行求两个文件每行对比的相同内容 遇到的一个实际问题是,2017年08月01日起,所有未经实名的域名,全部停止解析.而我手上有不少域名,其中很多都是没有实名的.但我不知道哪些实名了,哪些 ...

  3. Meld:文件及目录对比工具

    Meld:文件及目录对比工具 http://wowubuntu.com/meld.html http://meld.sourceforge.net/

  4. PE文件加节感染之Win32.Loader.bx.V病毒分析

    一.病毒名称:Win32.Loader.bx.V 二.分析工具:IDA 5.5.OllyDebug.StudPE 三.PE文件加节感染病毒简介 PE病毒感染的方式比较多,也比较复杂也比较难分析,下面就 ...

  5. .NET和.NET Core Web APi FormData多文件上传对比

    前言 最近因维护.NET和.NET Core项目用到文件上传功能,虽说也做过,但是没做过什么对比,借此将二者利用Ajax通过FormData上传文件做一个总结,通过视图提交表单太简单,这里不做阐述,希 ...

  6. Linux下创建与解压tar, tar.gz和tar.bz2文件及压缩率对比 | 沉思小屋

    刚 在qq群里面一位仁兄问到文件压缩的命令,平时工作中大多用解压缩命令,要是遇到压缩就现查(这不是一个好习惯),于是整理下Linux下创建与解压 zip.tar.tar.gz和tar.bz2文件及他们 ...

  7. Object-c:两种文件读写的对比

    一.读写方法对比:(主要针对本地读取本地文件) 方式\操作 读 写 非URL方式 stringWithContentsOfFile writeToFile URL方式 stringWithConten ...

  8. 巧用CSS文件愚人节恶搞(转)

    明天就是4月1日愚人节了,也就是那个可适度开玩笑.整蛊的日子了.如果你想和那些要上网的朋友或同事开个极客式玩笑,那就来试试这个国外网友Wes Bos分享的 CSS 文件吧. 一.打开浏览器的 Cust ...

  9. NIO与普通IO文件读写性能对比

    最近在熟悉java的nio功能.nio采用了缓冲区的方式进行文件的读写,这一点更接近于OS执行I/O的方式.写了个新旧I/O复制文件的代码,练练手,顺便验证一下两者读写性能的对比,nio是否真的比普通 ...

随机推荐

  1. JDK1.5新特性(二)……Static Import

    援引 Static Import - This facility lets you avoid qualifying static members with class names without t ...

  2. ACM2030_机内码

    /* 汉字统计 问题说明 统计给定文本文件中汉字的个数.   输入 输入文件首先包含一个整数Ñ,表示测试实例的个数,然后是Ñ段文本.   产量 对于每一段文本,输出其中的汉字的个数,每个测试实例的输出 ...

  3. Spring笔记之(一)初探

    对spring框架的学习我是从模拟它的简单实现开始,这样也易于领悟到它的整个框架结构,以下是简单实现的代码: 配置文件:spring.xml <?xml version="1.0&qu ...

  4. 教程-Delphi源代码--后延函数

    说明: 1)TTtimer控件 TTtimer控件的实质是调用WindowsAPI定时函数SetTimer和KillTimer来实现的,并简化了对WM_TIMER消息的处理过程.通过设置OnTimer ...

  5. Git学习资料

    1.http://wuyuans.com/2012/05/github-simple-tutorial/ 2.http://www.ihref.com/read-16369.html

  6. SQL SERVER全面优化

    今天我们从语句的一些优化写法及一些简单优化方法做一个介绍.这对于很多开发人员来说还是很有用的!为了方便阅读给出前文链接: SQL SERVER全面优化-------Expert for SQL Ser ...

  7. cocos2d-x载入texture

    转自:http://blog.csdn.net/aa4790139/article/details/8107325 SpriteTestLayer.cpp(就只改了这个这个文件) #include & ...

  8. C++中的类访问控制

    C++中 public,protected, private 访问标号小结 第一:private, public, protected 访问标号的访问范围. private:只能由1.该类中的函数.2 ...

  9. PHP 函数:intval()

    intval   变量转成整数类型. 语法: int intval(mixed var, int [base]); 返回值: 整数 函数种类: PHP 系统功能 内容说明:本函数可将变量转成整数类型. ...

  10. shell 两个rpm包做差分

      当前目录下两个rpm包做差分. *.rpm 两个目录,解压rpm包. export LANG=c 差分判断是脚本还是Binary Files 脚本添加命令行提示符,awk. [root@sj_x8 ...