用ofstream保存文件
saving file with ofstream
我是c++的新手,我有一个名为"test.jpg"的图像,我将其转换为base64并再次解码,像这样:
std::ifstream inputFile;
inputFile.open("test.jpg",std::ios::binary);
std::filebuf* pbuf = inputFile.rdbuf();
inputFile.seekg (0, ios::end);
int length = inputFile.tellg();
// allocate memory to contain file data
char* buffer=new char[length];
// get file data
pbuf->sgetn (buffer,length);
inputFile.close();
CBase64 base64;
string encodedData = base64.base64_encode((unsigned char*)buffer,length);
delete[] buffer;
string decodedData = base64.base64_decode(encodedData);
ofstream outPutFile;
outPutFile.open("test2.jpg",ios::binary | ios::out);
outPutFile.write(decodedData.c_str(), decodedData.length());
outPutFile.close();
"test2.jpg"与"test.jpg"(原始文件)的大小完全相同,但是,我无法打开它。我找不到问题所在。
我搞定了。我只是替换了:
outPutFile.open("test2.jpg",ios::binary | ios::out);
outPutFile.open("test2.jpg", ios_base::out | ios_base::binary);
std::string path = "file.txt";
std::string cfgString = "data";
std::ofstream output(path.c_str(), ios_base::out | std::ios::binary);
if (output.is_open()) {
output.write(cfgString.data(), cfgString.length());
}
output.close();
显然,您的文件写入逻辑没有表面上的问题,尽管存在一些不正常的情况。最大的问题在于你的主逻辑。
这个程序看起来是一个简单的复制文件程序。您正在做的是读取一个文件,将其数据转换为base64字符串,然后再次解码数据为std::string
。现在有一个小问题。不能成功地将base64字符串转换为以空结尾的ANSI字符串,原因很明显,解码的二进制数据中的任何0都会过早地终止字符串。其次,您以二进制模式打开文件以写入,但试图在文件中写入std::string
。但这并不重要,因为您的数据已经在之前的操作中损坏了。
要解决这个问题,你可以简单地使用文件复制的例子,或者确保只小心地将二进制数据写入输出文件,这意味着从输入文件中读取二进制数据,并将相同的缓冲区写入输出文件。不需要base64编码解码。
你好像忘了写
inputFile.seekg (0, ios::beg);
获取文件长度后的。这意味着您尝试从文件的末尾而不是开始读取。
相关文章:
- 保存文件并使控制台不关闭:Visual Studio 2019
- 将值更改为 c++ 的数组并保存文件
- 如何保存文件中的所有数据?C++
- 更改代码::块上的默认保存文件类型
- 使用setW()函数保存文件时,如何获取每个属性的值
- 尝试使用 ostream 保存文件内容时出错
- 如何使用3d的max 2016 SDK(C++)在插件中添加保存文件对话框?
- 如何在不保存文件的情况下制作打印屏幕并将其发送到FTP服务器?我的工作代码将文件保存到HDD
- 视频编写器功能不会使用 OpenCV-3.0.0 保存文件
- 使用fstream明确保存文件,而无需在C 中关闭文件
- 位换档字符串以解码保存文件C
- QFile在程序退出时保存文件,根本不会保存~500MB文件
- 保存文件或文件夹的时间戳
- Fstream不会保存文件中的最后一个单词,也不会从文件中读取
- CFileDialog保存文件的名称为空
- 读取文件(ifstream)和写入文件(ofstream)-编码问题
- 如何以正确的编码保存文件
- 在动态分配的 char 数组中保存文件的类内容
- 如何在win32中使用GetSave文件名保存文件
- 用ofstream保存文件