Ramiien Ответов: 4

чтение нескольких txt файлов в QT


Я пытаюсь прочитать данные из нескольких файлов .txt в Qt. Вот как я это делаю



void MainWindow::on_pushButton_3_clicked()
{

 QString path = "C:/MyDevelopment/readfiles";
 QDir dir(path);



 QStringList filters;
 filters << "*.txt";

 foreach ( QString fileName, dir.entryList(filters, QDir::Files) )
 {

     QFile readFile(fileName);
     if(!readFile.open(QIODevice::ReadOnly | QIODevice::Text ) )
      {
        qDebug("Failed to read file.....");
        //return ;
      }
      QTextStream in(&fileName);
      while (!in.atEnd())
      {
          QString line = in.readLine();
           qDebug() << line;
      }

 }

У меня есть файл 4 .txt в упомянутой папке. Я всегда получаю msg "не удалось прочитать файл.." для всех файлов.
было бы неплохо, если бы кто-то мог подчеркнуть, что я делаю неправильно

4 Ответов

Рейтинг:
2

CPallini

Я бы попробовал позвонить функцию ReadFile.errorString()[^].


Рейтинг:
13

Ramiien

QString path = "C:/MyDevelopment/readfiles";
    QDir dir(path);
    QStringList filters;
    filters << "*.txt";

    foreach (QFileInfo fileInfo, dir.entryInfoList(filters, QDir::Files))
    {
       QString fileName = fileInfo.absoluteFilePath();
       //qDebug(fileInfo.absoluteFilePath().toLocal8Bit());
       QFile readFile(fileInfo.absoluteFilePath());
       if(!readFile.open(QIODevice::ReadOnly | QIODevice::Text ) )
             {
               qDebug("Failed to read file.....");
               //return ;
             }
             QTextStream in(&fileName);
             while (!in.atEnd())
             {
                 QString line = in.readLine();
                  qDebug() << line;
             }
    }

вывод-это путь к файлу, который все еще не читает файлы. Я уверен, что делаю что-то не так, как обычно...
"C:/MyDevelopment/readfiles/fyfile3.txt"


Рейтинг:
0

Jochen Arndt

Вы проверили имена файлов, которые пытаетесь открыть?

Если вы это сделаете, то можете заметить, что это простые имена файлов без пути. Затем QFile пытается открыть файл в текущем каталоге, который, вероятно, не является тем, в который был передан QDir.

Чтобы получить полные имена с помощью path, вы должны использовать QDir::entryInfoList:

foreach (QFileInfo fileInfo, dir.entryInfoList(filters, QDir::Files) )
{
    QFile readFile(fileInfo.absoluteFilePath());
    // ...


Ramiien

с помощью QFileinfo управление не входит в цикл foreach. ?

foreach (QFileInfo fileInfo, dir.entryInfoList(filters, QDir::Files) )

Jochen Arndt

Просто протестировал его здесь, и он работает (на Пи с подходящим реж и маской):

QString path = "/home/pi/ArgosTest";
QDir dir(путь);
Фильтры QStringList;
фильтры << "*.sh";
foreach ( QFileInfo fileInfo, dir.entryInfoList(filters, QDir::Files) )
{
qDebug(fileInfo.absoluteFilePath().toLocal8Bit());
}

Выход:
/home/pi/ArgosTest/main.sh
/home/pi/ArgosTest/shell.sh
/home/pi/ArgosTest/test.sh
/home/pi/ArgosTest/ts-calibrate.sh
/home/pi/ArgosTest/ts-test.sh

Ramiien

я опубликовал свой код в решении 3. почему он не читает содержимое файла??

Jochen Arndt

Код из решения 3 не работает? Затем спросите плакат этого решения.

А, это ты.

Вы не должны публиковать решения, которые не отвечают и не решают вопрос (потому что они не являются решением и поэтому могут быть сообщены и удалены). Также невежливо публиковать решение, основанное на других решениях, и принимать его вместо ответа.

У вас есть два варианта:

1. отредактируйте свой вопрос, добавьте новый код и объясните, какие проблемы у вас сейчас есть. Но не удаляйте части исходного вопроса и не изменяйте исходный код. В противном случае связь между существующими ответами и вопросами теряется. Это также хороший стиль, чтобы указать, что было изменено (например, вставив что-то вроде "[EDIT]" перед добавленным контентом). Это относится и к ответам (вы отредактировали свои ответы без этих указаний)

2. Поставьте новый вопрос.

"почему он не читает содержимое файла?"
Я не знаю. Будьте информативны: где возникает проблема (например, открытие, чтение)? Есть ли какое - то сообщение об ошибке? Есть ли предупреждения компилятора? Что такое отладочный вывод?

При предоставлении такой информации гораздо проще найти проблему. Даже вы можете найти его сами, отвечая на эти вопросы. Не ждите, что кто-то здесь будет компилировать ваш код.

Наконец, вы должны удалить свое "решение".

Рейтинг:
0

Sayan Bera

"C:/MyDevelopment/readfiles/fyfile3.txt"

измените путь на следующий и попробуйте
"C:\\MyDevelopment\\readfiles\\fyfile3.txt"