为什么我的代码只读取文件的最后一行?

use*_*532 2 c++

我正在编写一个应用程序,它会将一些预编译的软件包安装到ARM Chromebook上,而且每次添加新软件包时我都不想更新我的程序,因此我将其设置为只下载一个列表我拥有的所有软件包(我可以更新),然后检查它是否是我编译并上传到我的网站的软件包.

问题是,它似乎只是读取文件的最后一行.最让我困惑的是它只读取了这个特定文件的最后一行.大多数其他文件读取所有行都很好.

这是我的代码:

#include <iostream>
#include <cstdlib>
#include <string>
#include <fstream>
#include <cstdio>
using namespace std;

int main(int argc, char* args[]) {
    if (argc < 2) {
        cout << "Please specify an application name.\n";
        return 0;   
    }
    cout << "Fetching list...\n";
    system("wget -N www.charmbrew.tk/files/list --quiet");

    cout << "Reading application list...\n";
    string line;
    string package = args[1];   
    bool isInList = false;  

    ifstream list("list");
    while (getline(list,line)) {
        cout << line;
        if (line == package) isInList = true;
    }
    list.close();
...
}
Run Code Online (Sandbox Code Playgroud)

此代码仅读取文件的最后一行.该文件包含三行,但只读取最后一行.除了这个在我的电脑上的所有其他文件,它将读取所有行.

我下载后检查了文件.我知道它有多行文字.但是有些原因我的代码只会继续阅读最后一行.

文本文件只是一个简单的文本文件.没什么特别的.您可以自己下载并查看.

Ola*_*che 6

代码读取每一行,但该文件list具有CR LF作为行结尾.这意味着每行读取都包含一个\r末尾,这会导致下一行写入前一行.

如果要查看所有行,请使用

cout << line << '\n';
Run Code Online (Sandbox Code Playgroud)

这是在Unix系统上,其中行结尾仅为换行符.在Windows系统上,您将CR LF作为行结尾,在那里您应该看到所有行都写在一行上

nanovimlynx
Run Code Online (Sandbox Code Playgroud)