0

我需要阅读在 C++ 程序中在 Windows 中创建的、在 Debian Linux 上编译的 txt 文件。不幸的是,我对行尾分隔符有疑问。我知道行尾指示符在 Linux 和 Windows 中是不同的。因此,在 Linux 中,我的 C++ 程序读取类似“correct_line^M”的内容。

我的问题:如何在 Linux 中正确读取在 Windows 中创建的文件?我是否需要手动将其转换为 Linux 表示(我想避免它)?

谢谢你。

4

2 回答 2

3

你必须自己做。(恕我直言,如果以文本模式打开,一个好的库会自动执行此filebuf操作。但我熟悉的库不会。)

取决于你在做什么,这可能无关紧要。无论如何,任何面向行的输入都应该接受尾随空格,并且额外的 0x0D 字符是空格。因此,除了编辑之外,这通常无关紧要。

如果您想在写入文件时(在 Windows 下)抑制多余的 0x0D,只需以二进制模式打开文件即可。就此而言,当文件的可移植性受到关注时,以二进制模式打开文件并编写协议所需的任何约定通常是一个好主意。(使用两个字符序列 0x0D、0x0A 或多或少是标准的,并且是大多数 Internet 协议所指定的。)再次读取时,以二进制模式打开,并编写代码以接受任何通常的约定:两个字符序列0x0D、0x0A 或单个 0x0D 或单个 0x0A。(这可以通过过滤流缓冲区来完成。)

于 2012-05-18T10:57:37.983 回答
0

你可能会跑dos2unix。它会转换你的文件。

于 2012-05-18T10:12:48.810 回答