【问题标题】:When writing from the buffer to the file, the file becomes one character larger从缓冲区写入文件时,文件变大一个字符
【发布时间】:2019-12-11 04:25:13
【问题描述】:

我使用 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();

【问题讨论】:

    标签: c++ fstream


    【解决方案1】:

    我很惊讶以下行甚至可以编译。

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

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

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

    【讨论】:

    • 要么应用逗号运算符:)
    • @DavidC.Rankin, 逗号运算符不应该应用在函数调用中:)
    • 是的,是的,像"cannot appear in contexts where a comma is used to separate items" 这样的小限制。还挺有趣的:)
    • @RSahu,对不起,我不明白问题是什么,我什至试图通过 fwrite() 记录,由于疲劳我没有注意到我正在使用打开功能不正确。重点是以二进制模式记录,谢谢:D
    • @Des4tempt,不要太担心。我们大多数人都经历过这样的时刻。编码愉快。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-06
    • 1970-01-01
    • 2023-03-29
    • 2011-07-05
    • 1970-01-01
    相关资源
    最近更新 更多