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;
}

猜你喜欢

转载自blog.csdn.net/qq_44575789/article/details/107291688