我读了一个文件,发现在任何0x0A
之后都有0x0D
。
我只知道是windows做的转换。
但是我用了二进制模式,它不能阻止吗?
ifstream input(inputname, ios::binary);input.get(ch);
我如何避免它。我只想获取 \n
。
写文件怎么样?
提前致谢。
最佳答案
如果您使用的系统确实使用 \r\n
行结尾,那么以文本 模式打开文件将导致系统自动将这些转换为没有 \r
的标准 \n
。以二进制模式打开文件会阻止这种转换。
如果您使用的系统不 使用此约定,则没有可转换行尾的模式。您必须自己手动转换它们或使用外部工具预处理文件。
如果要检测文件是否使用 \r\n
,则必须手动执行。扫描文本文件并查看是否每个 \n
前面都有一个 \r
。
作为替代方案,您可以简单地在处理代码中添加逻辑以专门处理 \r
后跟 \n ,而不是尝试抢先检测文件使用的行尾类型
。像这样的东西:
for (int i=0; i<n; ++i) {
if ('\r' == text[i] && (i+1<n) && '\n' == text[i+1])
++i; // skip carriage return, just handle newline
if ('\n' == text[i])
handle newline...
else
handle other characters
}
关于c++ - 读文件时0x0D后0x0A,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13921247/