QTextStream atEnd() возвращает true, когда начинает читать из файла

Я хочу прочитать и проанализировать содержимое файла /proc/PID/status на компьютере с Linux, но QTextStream.atEnd всегда возвращает true при начале чтения. Код:

QString procDirectory = "/proc/";
    procDirectory.append(QString::number(PID));
    procDirectory.append("/status");
    QFile inputFile(procDirectory);
    if (inputFile.open(QIODevice::ReadOnly))
    {
        QTextStream in(&inputFile);
        QString line;

        while (!in.atEnd())
        {
            line = in.readLine();

Файл существует, и если я читаю строки вручную без выражения while, файлы читаются нормально.

Я что-то упустил очевидное?

(Debian 8 x64, QT 5.4.1 x64, gcc 4.9.2)

2 ответа

Решение

Предпочтительным способом часто повторять эти потоки является цикл do/while. Это сделано для того, чтобы позволить потоку правильно определять Unicode до того, как будут выполнены какие-либо запросы (например, atEnd).

QTextStream stream(stdin);
QString line;
do {
    line = stream.readLine();
} while (!line.isNull());

Nevermind обнаружил, что мне нужно прочитать одну строку перед предложением while, теперь это работает.

Другие вопросы по тегам