CStdioFile :: WriteString为换行添加额外的回车符?

时间:2015-05-21 12:57:02

标签: c++ unicode mfc

我刚刚遇到以下行为:使用CStdioFile::WriteString时,它会将\n转换为\r\n。 只有在我将项目转换为Unicode之后,我才在早期版本的代码中注意到这种行为。我错过了什么?

我试过这段代码:

        CStdioFile file;
        CFileException fileException;

        file.Open(TEXT("c:\\test.txt"), CFile::modeCreate | CFile::modeWrite | CFile::shareExclusive | CFile::typeText, &fileException);

        file.WriteString(TEXT("__CR\r"));
        file.WriteString(TEXT("__LF\n"));
        file.WriteString(TEXT("CRLF\r\n"));
        file.WriteString(TEXT("____"));
        file.Flush();
        file.Close();

结果输出现在是:

__CR\r
__LF\r\n   //??
CRLF\r\r\n //??
____

1 个答案:

答案 0 :(得分:3)

我自己找到了答案:这是attachments['test.txt'] = File.read("#{Rails.root}/test.txt") 的设计行为。

MSDN documentation州:

  

文字模式为回车换行对提供特殊处理。当您将新行字符(0x0A)写入文本模式CStdioFile对象时,字节对(0x0D,0x0A)将发送到该文件。读取时,字节对(0x0D,0x0A)转换为单个0x0A字节。

所以实际上我将模式从CFile::typeText更改为CFile::typeBinary,从而引发了另一种行为。对于CFile::typeText,您将无法获得额外的回车。