从缓冲区写入文件时,文件变大一个字符
When writing from the buffer to the file, the file becomes one character larger
我使用 zlib 库从字符串中压缩数据,并在字符串中获取压缩数据。我使用 fstream 加载和卸载压缩数据。问题是有时会发生这样的情况,当一行写入文件时,它会变大一个字节,我不明白为什么会这样。我用压缩数据检查了一行,它的大小正确,我可以在程序中从中获取解压缩数据,而无需写入文件。因为在文件中多了一个字符,我无法再解压该数据。从文件中读取这样一行时,相应地多了一个字符,如文本编辑器中所示。
有"Sel"说什么字符串大小是82。
这是将压缩字符串放入文件的函数示例:
std::fstream file(filename, std::ios::out, std::ios::binary);
if (!file.is_open()) {
std::cout << "Unable to open file: " << filename << std::endl;
return;
}
std::stringstream someData;
...puts data in "someData"...
std::string compressedData = Compress_String(someData.str());
std::cout << "Comp string: " << compressedData << std::endl;
std::cout << "Comp size: " << compressedData.size() << std::endl;
file << compressedData;
file.close();
令我惊讶的是,以下行甚至可以编译。
std::fstream file(filename, std::ios::out, std::ios::binary);
您的编译器必须支持非标准构造函数。你需要的是
std::fstream file(filename, std::ios::out | std::ios::binary);
// ^^^
我使用 zlib 库从字符串中压缩数据,并在字符串中获取压缩数据。我使用 fstream 加载和卸载压缩数据。问题是有时会发生这样的情况,当一行写入文件时,它会变大一个字节,我不明白为什么会这样。我用压缩数据检查了一行,它的大小正确,我可以在程序中从中获取解压缩数据,而无需写入文件。因为在文件中多了一个字符,我无法再解压该数据。从文件中读取这样一行时,相应地多了一个字符,如文本编辑器中所示。
有"Sel"说什么字符串大小是82。
这是将压缩字符串放入文件的函数示例:
std::fstream file(filename, std::ios::out, std::ios::binary);
if (!file.is_open()) {
std::cout << "Unable to open file: " << filename << std::endl;
return;
}
std::stringstream someData;
...puts data in "someData"...
std::string compressedData = Compress_String(someData.str());
std::cout << "Comp string: " << compressedData << std::endl;
std::cout << "Comp size: " << compressedData.size() << std::endl;
file << compressedData;
file.close();
令我惊讶的是,以下行甚至可以编译。
std::fstream file(filename, std::ios::out, std::ios::binary);
您的编译器必须支持非标准构造函数。你需要的是
std::fstream file(filename, std::ios::out | std::ios::binary);
// ^^^