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



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

我试过这个代码:

        CStdioFile file;
        CFileException fileException;
        file.Open(TEXT("c:\test.txt"), CFile::modeCreate | CFile::modeWrite | CFile::shareExclusive | CFile::typeText, &fileException);
        file.WriteString(TEXT("__CRr"));
        file.WriteString(TEXT("__LFn"));
        file.WriteString(TEXT("CRLFrn"));
        file.WriteString(TEXT("____"));
        file.Flush();
        file.Close();

现在的输出结果是:

__CRr
__LFrn   //??
CRLFrrn //??
____

我自己刚刚找到了答案:这是CFile::typeText的设计行为。

MSDN文档说明:

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

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

相关内容

  • 没有找到相关文章

最新更新