ifstream获取二进制文件长度并比较内容

#include <fstream>
using namespace std;

bool FileCompare_Binary(const string file1, const string file2)
{
    //File1
    //////////////////////////////////////////////////////////////////////////
    ifstream  fin1(file1.c_str(), ios::binary);
    fin1.exceptions ( ifstream::eofbit | ifstream::failbit | ifstream::badbit );

    istream::pos_type current_pos1 = fin1.tellg();//记录下当前位置 
    fin1.seekg(0,ios_base::end);//移动到文件尾
    istream::pos_type file_size1 = fin1.tellg();//取得当前位置的指针长度->即文件长度 
    fin1.seekg(current_pos1);//移动到原来的位置

    BYTE* data1 = new BYTE[file_size1];
    memset(data1, 0, file_size1);

    fin1.read( reinterpret_cast<char*>(data1), file_size1 * sizeof(BYTE) );
    fin1.close();

    //File2
    //////////////////////////////////////////////////////////////////////////
    ifstream  fin2(file2.c_str(), ios::binary);
    fin2.exceptions ( ifstream::eofbit | ifstream::failbit | ifstream::badbit );

    istream::pos_type current_pos2 = fin2.tellg();//记录下当前位置 
    fin2.seekg(0,ios_base::end);//移动到文件尾
    istream::pos_type file_size2 = fin2.tellg();//取得当前位置的指针长度->即文件长度 
    fin2.seekg(current_pos2);//移动到原来的位置

    BYTE* data2 = new BYTE[file_size2];
    memset(data2, 0, file_size2);

    fin2.read( reinterpret_cast<char*>(data2), file_size2 * sizeof(BYTE) );
    fin2.close();

    //////////////////////////////////////////////////////////////////////////
    if (file_size1 != file_size2)
    {
        delete[] data1;
        delete[] data2;
        return false;
    }
    else
    {
        if (memcmp(data1, data2, file_size1) != 0)
        {
            delete[] data1;
            delete[] data2;
            return false;
        }
    }

    delete[] data1;
    delete[] data2;

    return true;
}

你可能感兴趣的:(Stream)