`

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

    博客分类:
  • C++
 
阅读更多
#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;
}

分享到:
评论

相关推荐

    二进制文件读写操作

    ### 二进制文件读写操作详解:C++中的实践 在计算机科学中,二进制文件读写是一项基础但至关重要的技能,尤其对于高级语言如C++而言,掌握其二进制文件处理方法能够极大地提升数据处理效率与程序性能。本文将深入...

    一种C#读写二进制文件的通用方法-转

    在日常的工作中,我们经常需要进行一些二进制文件或协议的读写操作,用 C# 解析二进制文件常常是一件比较麻烦且容易出错的工作。本文介绍了一种在 C# 中实现快速读写二进制文件通用的方法。 知识点一:ID3V1 标签头...

    VC实现读取文件信息的小程序

    【VC实现读取文件信息的小程序】是一个基于Visual C++(VC)编写的程序,它专注于读取二进制文件的详细信息。这个小程序能够帮助用户了解文件的基本属性,如文件名和文件长度(以字节数计算)。此外,它还能够读取...

    c__读写文件.doc

    ### C++ 文件操作详解 ...本文介绍了C++中文件操作的基础知识,包括文件流的种类、文件的打开与关闭方式、基本读写操作以及二进制文件的处理方法。掌握这些基础知识对于开发基于文件处理的应用程序至关重要。

    VC/MFC 获取文件MD5值 获取大文件MD5值

    MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,它能够将任意长度的数据转化为一个固定长度的摘要,通常是一个128位的二进制数,以16进制表示为32个字符的字符串。 要实现这个功能,首先我们需要了解...

    文件读写 文件读写文件读写 文件读写

    文件读写涉及多种技术,包括文本文件的读取与写入、二进制文件操作、流式处理、缓冲机制等。下面将详细阐述这些关键知识点。 1. 文本文件读取与写入: - `fopen()` 函数:这是C语言中最常用的打开文件的函数,接受...

    实验11 文件操作和异常1

    在写入二进制文件时,需要确保记录的长度固定,这样在读取时才能正确解析。读取时,同样需要知道每种形状记录的固定长度,以便正确解码。 异常处理是C++中的重要概念,它允许程序优雅地处理错误。在实验中,自定义...

    计算机网络抓包课程设计.doc

    1. **算法设计**:设计一个读取二进制文件并解析IP报文头部的算法。这涉及到对二进制文件的操作和理解网络协议的结构。 2. **编码问题**:编写代码来读取二进制文件,并将数据转化为可读的文本格式输出。这需要处理...

    Borland c++ bulder的文件操作总结.rar_文件操作

    8. **文本文件和二进制文件**:`ifstream`和`ofstream`默认处理文本文件,如果需要处理二进制数据,如图片或音频文件,可以使用`ios::binary`标志。 9. **异常处理**:为了确保程序在遇到文件错误时不会崩溃,建议...

    文件的操作

    9. **二进制文件操作**: 如果需要存储非文本数据,如图像或音频,可以使用二进制模式打开文件。二进制模式的打开模式标志是`ios::binary`。在这种模式下,数据会被原样读写,不受换行符等字符转换的影响。 10. **...

    计算文件的md5值,源码

    2. **打开文件**:使用`std::ifstream`打开要计算MD5值的文件,并确保文件以二进制模式打开。 3. **初始化MD5上下文**:调用`MD5_Init`函数初始化MD5上下文结构体。 4. **读取文件内容**:逐块读取文件内容,每次...

    vc++文件系统大全

    6. **文件的读取与保存**:VC++提供了多种文件读写模式,如文本模式和二进制模式。`fread()`和`fwrite()`用于读写二进制数据,`fgets()`和`fprintf()`用于处理文本数据。流式I/O(`ifstream`和`ofstream`)提供了更...

    c++获取jpg图片的尺寸

    编写这样的程序可以避免依赖第三方库,但要注意的是,这需要对JPEG文件格式有深入的理解,并且需要谨慎处理二进制数据。如果你的工作涉及到大量复杂的图像处理,使用成熟的库如OpenCV或libjpeg可能会更高效,因为...

    C++中的文件操作

    **二进制文件读写**:对于二进制文件的读写,通常需要更复杂的操作,例如使用`read()`和`write()`方法,并且需要注意字节序等问题。 #### 七、总结 本文详细介绍了C++中的文件操作,包括文件流类、打开和关闭文件的...

    bmp图像文件读写例子

    同时,为了处理二进制数据,需要设置文件流的工作模式为二进制,例如`ios::binary`。 以下是一个简单的代码片段,展示如何读取和写入BMP文件: ```cpp #include #include // 定义BMP文件头和位图信息头结构体 /...

    MD5.rar_c md5_md5 文件_md5生成 c++_vc获取MD5_文件md5生成

    同时,还需要注意文件的二进制读取模式,因为MD5处理的是二进制数据,而不是文本。 例如,你可以创建一个函数,接受文件路径作为参数,打开文件,读取内容,然后计算MD5: ```cpp #include #include std::...

    读取SEGY文件并图形和数据显示

    要读取SEGY文件,我们需要了解其结构并使用C++的文件流(fstream)库来处理二进制数据。首先,打开文件并检查其头部信息,这包括SEGY版本标识、每道的样本数、样本间隔等。这些信息通常在文件的前3600个字节中。 ...

    bmp.zip_bmp_bmp文件_visual c

    在Visual C++中,我们通常使用二进制文件流来读取BMP文件。首先,需要创建一个ifstream对象,并将其打开模式设置为ios::binary,以处理二进制数据。例如: ```cpp #include std::ifstream file("path_to_your.bmp...

    MD5 C++实现 对文件计算MD5值

    3. **读取文件内容**:使用`std::ifstream`打开文件,读取其内容到内存缓冲区。MD5算法要求一次性读取整个文件,因此可能需要预先知道文件大小,或者在读取时动态调整缓冲区大小。 4. **MD5迭代计算**:调用MD5的...

    C++文件输入输出

    - **`ios::binary`**: 以二进制模式打开文件。 - **`ios::in`**: 以输入模式打开文件。 - **`ios::out`**: 以输出模式打开文件。 - **`ios::trunc`**: 如果文件已存在,则将其长度设置为0。 #### 五、文件读写操作 ...

Global site tag (gtag.js) - Google Analytics