我刚刚遇到以下行为:使用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 //??
____
答案 0 :(得分:3)
我自己找到了答案:这是attachments['test.txt'] = File.read("#{Rails.root}/test.txt")
的设计行为。
文字模式为回车换行对提供特殊处理。当您将新行字符(0x0A)写入文本模式CStdioFile对象时,字节对(0x0D,0x0A)将发送到该文件。读取时,字节对(0x0D,0x0A)转换为单个0x0A字节。
所以实际上我将模式从CFile::typeText
更改为CFile::typeBinary
,从而引发了另一种行为。对于CFile::typeText
,您将无法获得额外的回车。