首页 >后端开发 >C++ >为什么我的二进制文件仅复制部分内容,如何修复?

为什么我的二进制文件仅复制部分内容,如何修复?

Linda Hamilton
Linda Hamilton原创
2024-12-14 00:06:11406浏览

Why Does My Binary File Copy Only Partially, and How Can I Fix It?

读取和写入二进制文件

读取和写入二进制文件涉及处理原始数据,通常由表示各种类型数据的二进制代码组成。一个常见的任务是将数据从二进制文件读取到缓冲区,然后将其写入另一个文件。

问题:

尝试读取和写入二进制文件时使用以下代码创建文件时,仅将文件第一行中的几个 ASCII 字符存储在buffer:

int length;
char * buffer;

ifstream is;
is.open ("C:\Final.gif", ios::binary );
// get length of file:
is.seekg (0, ios::end);
length = is.tellg();
is.seekg (0, ios::beg);
// allocate memory:
buffer = new char [length];
// read data as a block:
is.read (buffer,length);
is.close();

FILE *pFile;
pFile = fopen ("C:\myfile.gif", "w");
fwrite (buffer , 1 , sizeof(buffer) , pFile );

解决方案:

有两种可能的方法来解决这个问题:

使用 C 流:

此方法涉及使用 C 标准库提供的 ifstream 和 ofstream 类。它允许高效且可移植的文件处理。

#include <fstream>
#include <iterator>
#include <algorithm>

int main()
{
    std::ifstream input( "C:\Final.gif", std::ios::binary );
    std::ofstream output( "C:\myfile.gif", std::ios::binary );

    std::copy( 
        std::istreambuf_iterator<char>(input), 
        std::istreambuf_iterator<char>( ),
        std::ostreambuf_iterator<char>(output));
}

使用缓冲区进行修改:

如果在将数据写入到缓冲区之前需要对其进行操作或修改文件,可以使用缓冲区来存储它。

#include <fstream>
#include <iterator>
#include <vector>

int main()
{
    std::ifstream input( "C:\Final.gif", std::ios::binary );

    // copies all data into buffer
    std::vector<unsigned char> buffer(std::istreambuf_iterator<char>(input), {});

}

以上是为什么我的二进制文件仅复制部分内容,如何修复?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn