从缓冲区写入文件时,文件将增加一个字符

时间:2019-12-11 04:25:13

标签: c++ fstream

我使用zlib库从字符串压缩数据,并且也以字符串形式获取压缩数据。我使用fstream加载和卸载压缩数据。问题是,有时会发生这样的情况:将一行写入文件时,该行变得大了一个字节,而我不明白为什么会这样。我检查了带有压缩数据的行,它的大小正确,并且可以在程序中从中获取解压缩的数据而无需写入文件。因为在文件中结果多出一个字符,所以我无法再解压缩该数据。从文件中读取这样的行时,相应地,文本编辑器中显示的行数也要多一个字符。

Output from console

enter image description here

有“ 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();

1 个答案:

答案 0 :(得分:2)

令我惊讶的是,以下几行甚至可以编译。

/^[A-Z0-9- ]+$/

您的编译器必须支持非标准的构造函数。您需要的是

std::fstream file(filename, std::ios::out, std::ios::binary);