作为一个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. 【HTML】Beginner1:TagsAttributesElements

    HTML(Hypertext Text Mark-up Language)&(How To Make L) HTML is used for meaning and CSS is used f ...

  2. HDOJ-ACM1017(JAVA)

    问题描述: 简单来说,就是 输入N,然后输入N个数据块,一个数据块包含(n,m),并计算0 < a < b < n 且 (a^2+b^2 +m)/(ab) 为整数.其中a,b只要符合 ...

  3. hdoj 2524 矩形A + B

    矩形A + B Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  4. C#中如何操作2个list

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:C#中如何操作2个list.

  5. POJ 2553 The Bottom of a Graph TarJan算法题解

    本题分两步: 1 使用Tarjan算法求全部最大子强连通图.而且标志出来 2 然后遍历这些节点看是否有出射的边,没有的顶点所在的子强连通图的全部点,都是解集. Tarjan算法就是模板算法了. 这里使 ...

  6. SEAndroid安全机制对Binder IPC的保护分析

    在SEAndroid安全机制中,除了文件和属性,还有Binder IPC须要保护.Binder IPC是Android系统的灵魂,使用得相当广泛又频繁.比如,应用程序都是Binder IPC请求訪问系 ...

  7. [Javascript] Drawing Paths - Curves and Arcs

    window.onload = function() { var canvas = document.getElementById("canvas"), context = can ...

  8. 在Linux下查看系统版本信息命令总结

    每次在想查看系统是多少位的时候.总是记不清究竟用哪个命令.所以做个总结. vonzhou@de16-C6100:~$ lsb_release -a No LSB modules are availab ...

  9. my.cnf 中字符集设置

    我们的一些业务系统最近出现了一种情况,尤其是新版的ios 设备,在发布消息时,使用了表情符号时,   对gbk 字符集的数据库,写入数据库的数据,在回显时,变成 ‘口口’ 无法回显,   对utf8 ...

  10. MHA工作原理

    http://my.oschina.net/u/1440383/blog/313798?fromerr=Tvth3ODF