字符放置和读取不匹配

时间:2012-01-08 08:27:42

标签: c++ file-io ifstream ofstream

我正在尝试编写一个Huffman编码器但是我遇到了一些压缩错误。我将问题识别为put()到ofstream的字符和来自同一文件的字符read()之间的不匹配。

此问题的一个具体实例:

  • put()写入ASCII字符10(换行符)
  • read()读取ASCII字符13(回车)

我认为读取并放入读取和写入原始数据(没有字符翻译)我不确定为什么会发生这种情况。有人可以帮助我吗?

以下是编写压缩文件的ofstream实例:

std::ofstream compressedFileStream(getCompressedFileName(),std::ios::binary||std::ios::ate);

和用于读取相同

的ifstream实例
    std::ifstream fileInput(getFileName()+".huf",std::ios::binary);

代码在Windows 7上运行,程序中的所有流都以二进制模式打开。

3 个答案:

答案 0 :(得分:5)

由于输入错误而未以二进制模式打开:

std::ofstream compressedFileStream(getCompressedFileName(),std::ios::binary||std::ios::ate)

应该是:

std::ofstream compressedFileStream(getCompressedFileName(),std::ios::binary|std::ios::ate)
                                                                      //   ^

|,而不是||

答案 1 :(得分:3)

症状表明您正在使用文本模式创建ofsteam,或者您正在使用以文本模式打开的filedesc创建它。 您将希望在构建时将ios :: binary传递给它,或者它可以在Windows上以文本模式运行。

添加代码后,原因证明是拼写错误;

std::ios::binary||std::ios::ate

应该是

std::ios::binary|std::ios::ate

答案 2 :(得分:0)

在Windows上,如果要编写二进制数据,则需要使用适当的属性打开文件。

同样,如果您正在读取二进制数据,则需要使用适当的属性打开该文件。