读取和写入二进制文件
读取和写入二进制文件涉及处理原始数据,通常由表示各种类型数据的二进制代码组成。一个常见的任务是将数据从二进制文件读取到缓冲区,然后将其写入另一个文件。
问题:
尝试读取和写入二进制文件时使用以下代码创建文件时,仅将文件第一行中的几个 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中文网其他相关文章!