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;
}
  • 10
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++中,操作文本文件(如.txt、.csv等)通常涉及文件输入流(ifstream)和文件输出流(ofstream)。这些操作包括读取文件内容和向文件写入数据。 **向文本文件写入(输出)**: ```cpp #include <fstream> #include <string> void writeToFile(const std::string& filename, const std::string& content) { std::ofstream outfile(filename); if (outfile.is_open()) { outfile << content; // 写入字符串 outfile.close(); // 关闭文件 std::cout << "Data written to file successfully.\n"; } else { std::cerr << "Failed to open the file.\n"; } } ``` 在这个例子中,`writeToFile` 函数尝试打开指定的文件名,如果成功,就将给定的内容写入文件,然后关闭文件。 **从文本文件读取(输入)**: ```cpp #include <fstream> #include <string> std::string readFromFile(const std::string& filename) { std::ifstream infile(filename); std::string content; if (infile.is_open()) { std::getline(infile, content); // 一次读取一行 infile.close(); return content; } else { std::cerr << "Failed to open the file.\n"; return ""; } } int main() { std::string data = readFromFile("example.txt"); if (!data.empty()) { std::cout << "File content: " << data << "\n"; } return 0; } ``` 在这个例子中,`readFromFile` 函数尝试打开文件并读取第一行内容到字符串中,然后关闭文件。 **相关问题--:** 1. 如何处理文件的读写操作? 2. 在C++中如何追加数据到已存在的文本文件? 3. 文件操作完成后,是否应该删除临时文件?为什么?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值