C++非文本文件写入混乱
C++非文本文件写入混乱
C++使用fstream读取非文本文件时,一般常规读取就可以,例如将图片读取出来并存储到char数组
ifstream File_test1;
//以读取方式打开jpg文件
File_test1.open("1.jpg", std::ios::in);
//定位到文件末尾
File_test1.seekg(0, File_test1.end);
//获得文件总长度
size_t allLength = File_test1.tellg();
//将指针定位到文件首
File_test1.seekg(0, File_test1.beg);
//定义数组
char* str_buff=new char[allLength+10];
//读取文件至数组
File_test1.read(str_buff,allLength);
//关闭文件
File_test1.close();
但是写入时就会有些坑,非文本类文件需要以二进制写入,例如
//以二进制截断写入方式打开文件
ofstream File_test2("tt2.jpg", std::ios::binary | std::ios::out | std::ios::trunc);
//将数组写入文件
File_test2.write(str_buff, allLength);
//关闭文件
File_test2.close();
不然会默认以文本形式写入。非文本类文件,例如图片,以文本方式写入会造成内部混乱。
完整代码
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream File_test1;
//以读取方式打开jpg文件
File_test1.open("1.jpg", std::ios::in);
//定位到文件末尾
File_test1.seekg(0, File_test1.end);
//获得文件总长度
size_t allLength = File_test1.tellg();
//将指针定位到文件首
File_test1.seekg(0, File_test1.beg);
//定义数组
char* str_buff=new char[allLength+10];
//读取文件至数组
File_test1.read(str_buff,allLength);
//关闭文件
File_test1.close();
//以二进制截断写入方式打开文件
ofstream File_test2("tt2.jpg", std::ios::binary | std::ios::out | std::ios::trunc);
//将数组写入文件
File_test2.write(str_buff, allLength);
//关闭文件
File_test2.close();
//释放空间
delete[] str_buff;
return 0;
}