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

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

Linda Hamilton
发布: 2024-12-14 00:06:11
原创
404 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板