c++,比较两个资料是否一样

c++,比较两个文件是否一样?
想比较两个文件的内容是否完全一样,我现在有三种想法:
1、mfc、sdk有没有现有的方法供使用,我查了msdn,好像是没有现有的方法
2、比较笨得方法:先比较文件长度,如果不等返回false;如果相等,在拷贝到内存中,用memcmp比较,如果文件比较大,而且恰好是在最后不一样,就悲剧了,所以不太想用,想到第三种方法。
3、网上有说有MD5算法,输入文件的内容,MD5处理之后得到一个字符串,然后比较这两个文件分别得到的字符串,如果相等,则返回true,否则返回false,我也比较倾向于第三种,但以前没用过,能不能帮忙用c++代码,MD5实现下这个函数。函数头如下:
输入参数两个文件的路径,输出这两个文件是否一致。
bool compfile(cstring sfile1,cstring sfile2)
{
  ...
  ...
}


谢谢!

------解决方案--------------------
感觉做MD5,性能不优,按第二个方案实现吧。
可以文件内存映射,然后再memcmp。
一般不同的文件,很快就查出来了。
------解决方案--------------------
Quote=引用:]
引用:
C/C++ code

C:\Users\ago>FC /B C:\Users\ago\Desktop\C++.bat "C:\Users\ago\Desktop\C++ - 副本
.bat"
正在比较文件 C:\USERS\AGO\DESKTOP\C++.bat 和 C:\USERS\AGO\DESKTOP\C++ - 副本.BAT

FC: 找不到差异
……
[/Quote]
既然前面我都是使用dos命令,那继续吧:
C/C++ code
#include <windows.h>  
#include <iostream.h> 
#include <stdio.h>    

void main()  
{  
    char file1[50] = "C:\\Users\\ago\\Desktop\\C++.bat";
    char file2[50] = "C:\\Users\\ago\\Desktop\\C++ - 副本.bat";
    char command[100] = {0};

    sprintf( command, "FC /B \"%s\" \"%s\" |find \"FC: 找不到差异\" >temp.txt" , file1 , file2);
    system(command);

    memset(command,0,100);

    FILE *file = fopen("temp.txt","r");
    fread(command,1,100,file);
    fclose(file);

    if (command[0]=='\0')
    {
        cout<<"有差异"<<endl;
    }
    //    FC: 找不到差异
    cout<< command <<endl;
    system("del temp.txt");

}

------解决方案--------------------
KISS原则:Keep It Simple and Stupid
有时候看起来很笨的方法,往往是好方法。

用MD5之类的散列算法当然是可以的,但当文件很大的时候,也需要很长时间来计算的。

俺个人推荐使用第2中方法。当然具体的做法需要思考一下,比如:
1. 内存映射。可以用操作内存的方式来操作文件。
2. 要提高效率可以使用多线程。对于大文件的比较时,尤其如此。