Почему мой код только читает последнюю строку файла?

59
9

Я пишу приложение, которое установит некоторые предварительно скомпилированные пакеты на Chromebook ARM, и я не хочу обновлять свою программу каждый раз, когда добавляю новый пакет, поэтому я установил его, чтобы просто загрузить список все пакеты, которые у меня есть (которые я могу обновить), а затем проверить это, чтобы увидеть, если пакет, который я уже скомпилировал и загрузил на мой сайт.

Проблема в том, что, по-видимому, она читает последнюю строку файла. Что меня больше смущает, так это то, что он читает только последнюю строку этого конкретного файла. В большинстве других файлов он отлично читает все строки.

Вот мой код:

#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();
...
}

Этот код читает только последнюю строку файла. Файл содержит три строки, но он только читает последний. Каждый другой файл, кроме этого на моем ПК, будет читать все строки.

Я проверил файл после его загрузки. Я знаю, что он имеет несколько строк текста. Но по какой-то причине мой код продолжает читать только последнюю строку.

Текстовый файл представляет собой простой текстовый файл. Ничего особенного в этом нет. Вы можете скачать его сами и посмотреть.

спросил(а) 2014-01-01T22:52:00+04:00 5 лет, 11 месяцев назад
1
Решение
79

Код читает каждую строку, но list файлов имеет CR LF в качестве окончаний строки. Это означает, что каждая прочитанная строка включает в себя \r в конце, что приводит к следующей строке, написанной над предыдущей.

Если вы хотите увидеть все строки, используйте

cout << line << '\n';

Это находится в системе Unix, где заканчивается строка только для линии. В системе Windows у вас есть CR LF в качестве окончаний строки, там вы должны увидеть все строки, написанные на одной строке, как

nanovimlynx

ответил(а) 2014-01-01T23:00:00+04:00 5 лет, 11 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема