KL
31 марта 2017 г. 0:21

Поиск строки в папке с файлами.

Добрый вечер. Подскажите как мне написать программу поиска строки в файлах папки. Файлы с разным разрешением.

2

Вам это нравится? Поделитесь в социальных сетях!

11
Evgenii Legotckoi
  • 31 марта 2017 г. 10:30
  • Ответ был помечен как решение.

Добрый день.
Если подразумевался поиск строки внутри файла, то можно сделать так:

QDir dir("/path/to/folder/FOLDER");

if (dir.exists())
{
    // Ищем даже по скрытым файлам
    dir.setFilter(QDir::Files | QDir::Hidden | QDir::NoSymLinks);
    dir.setSorting(QDir::Name);    // Сортируем
    // Забираем список всех файлов в папке
    // НО не учитываются файлы во вложенных папках, нужно делать рекурсивный поиск
    QFileInfoList list = dir.entryInfoList();
    
    // Перебираем все файлы
    for (QFileInfo fileInfo : list)
    {
        QFile file(fileInfo.absoluteFilePath());
        // Если файл существует
        if (file.exists())
        {
            // то открываем его
            if (file.open(QIODevice::ReadOnly))
            {
                // Считываем файл построчно
                while(!file.atEnd())
                {
                    QString currentString = QString(file.readLine());
                   // Ищем вхождение требуемой строки в текущую строку файла
                    if (currentString.contains("I try find this stroke"))
                    {
                        qDebug() << "FOUNDED";
                    }
                }
            }
            file.close();
        }
    }
}

Идея такая, можете добавить QVector или QMap для хранения найденных строк и счётчики для номера строки.

    KL
    • 1 апреля 2017 г. 13:59

    В QT есть класс по управлению выбора файла. Как выбор цвета в отдельном окне, только с файлами. Подскажите его название и как узнать путь выбранного в нем файла.

      Evgenii Legotckoi
      • 1 апреля 2017 г. 14:14

      Для этого используется QFileDialog :

      QString fileName = QFileDialog::getOpenFileName(this,             // Устанавливаем parent
                                                      tr("Open File"),  // Устанавливаем заголовок
                                                      "/home",          // Устанавливаем стартовую папку
                                                      tr("Images (*.png *.xpm *.jpg)"));    // Устанавливаем расширения файлов, которые ищем
        KL
        • 1 апреля 2017 г. 14:31

        (QFileInfo fileInfo:list)При сборке ругается на эту строку.

          KL
          • 1 апреля 2017 г. 19:24

          Ребята, что делать с (QFileInfo fileInfo:list)

            Evgenii Legotckoi
            • 1 апреля 2017 г. 20:20

            Хорошо, ругается. Как ругается? Что пишет в ошибке?

              KL
              • 1 апреля 2017 г. 20:33

              C:\Users\user\Documents\Found\mainwindow.cpp:35: ошибка: range-based 'for' loops are not allowed in C++98 mode for (QFileInfo fileInfo : list) ^

                Evgenii Legotckoi
                • 1 апреля 2017 г. 20:39

                Ох тыж ёжик. 0_о По какой такой странной причине вы используете стандарт C++98?

                for (QFileInfo fileInfo : list) - это запись перебора элементов контейнера из стандарта C++11.

                Если у вас нет веских причин использовать C++98, то покопайтесь в настройках и настройте проект на использование C++11. В противном случае перепишите с использованием макроса foreach :

                foreach (QFileInfo fileInfo, list)

                  KL
                  • 1 апреля 2017 г. 20:41

                  Благодарю, заработало.

                    KL
                    • 2 апреля 2017 г. 22:38

                    QFileDialog Как открыть папку? Получается открыть только файл.

                      Evgenii Legotckoi
                      • 2 апреля 2017 г. 22:43

                      Использовать метод getExistingDirectory вместо getOpenFileName

                      QString dir = QFileDialog::getExistingDirectory(this, tr("Open Directory"),
                                                                      "/home",
                                                                      QFileDialog::ShowDirsOnly
                                                                      | QFileDialog::DontResolveSymlinks);

                        Комментарии

                        Только авторизованные пользователи могут публиковать комментарии.
                        Пожалуйста, авторизуйтесь или зарегистрируйтесь
                        • Последние комментарии
                        • Evgenii Legotckoi
                          16 апреля 2025 г. 17:08
                          Благодарю за отзыв. И вам желаю всяческих успехов!
                        • IscanderChe
                          12 апреля 2025 г. 17:12
                          Добрый день. Спасибо Вам за этот проект и отдельно за ответы на форуме, которые мне очень помогли в некоммерческих пет-проектах. Профессиональным программистом я так и не стал, но узнал мно…
                        • AK
                          1 апреля 2025 г. 11:41
                          Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
                        • Evgenii Legotckoi
                          9 марта 2025 г. 21:02
                          К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
                        • VP
                          9 марта 2025 г. 16:14
                          Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…