gpt4 book ai didi

c++ - Windows 和 Linux 文本文件处理问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:21:17 26 4
gpt4 key购买 nike

好吧,这是我在处理文本文件时遇到的奇怪的跨平台问题。假设我有一个非常简单地读取文本文件的程序

// reading a text file
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main () {
string line;
ifstream myfile ("example.txt");
if (myfile.is_open())
{
while ( myfile.good() )
{
getline (myfile,line);
if (line == "BEGIN")
cout << line << endl;
}
myfile.close();
}

else cout << "Unable to open file";

return 0;
}

因此,它读取一个文本文件,如果遇到 BEGIN,则吐出它正在读取的行。这是我正在阅读的文本文件:

HEADER
BEGIN
X 2
Y 2
Z 1
END

Windows 成功吐出 BEGIN 一次,因为遇到了一次。 Linux 什么也没吐出来。我在这里缺少什么基本的东西吗?

最佳答案

如果文件有 windows 换行符(也就是说,每一行都以回车符 + 换行符结束,而不是像 Linux 期望的那样只是换行符),那么 line 将是 "BEGIN\r" 而不是 Linux 上的 "BEGIN"

要解决此问题,您可以在文件上运行 dos2unix 以将其转换为 Linux 行结尾:

dos2unix example.txt

或者,如果您希望文件在两个系统上相同,您可以以二进制模式而不是文本模式打开它:

  ifstream myfile ("example.txt", ios_base::binary);

然后两个系统将以相同的方式读取文件。 (如果它使用 Windows 行结尾,那么您的程序将不得不处理回车,但至少您会看到一致的行为。)

关于c++ - Windows 和 Linux 文本文件处理问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9122775/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com