c++ - 读文件时0x0D后0x0A

标签 c++

我读了一个文件,发现在任何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/

相关文章:

c++ - 访问说明符对 friend 功能重要吗?

c++ - C++ 中的模板类和函数重载

c++ - 使用字符数组反转字符串

c++ - 为无异常数组寻找一个好的解决方案

c++ - 如何用android ndk和eclipse编译c++11代码?

c++ - 默认构建的 map 迭代器在递增时进入无限循环 - Green Hills 编译器

c++ - 如何在 Boost.Spirit 语义 Action 中获得函数结果

c++ - 如何处理这个异常

c++ - 运行非常简单的程序 (C++) 时出现运行时错误

c++ - 来自多线程 SDL 应用程序的 InvalidCursor 错误