KL
Konstantin Lazarev30 марта 2017 г. 14:21

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

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

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

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

11
Evgenii Legotckoi
  • 31 марта 2017 г. 0: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 г. 3:59

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

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

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

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

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

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

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

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

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

              KL
              • 1 апреля 2017 г. 10: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 г. 10:39

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

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

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

                foreach (QFileInfo fileInfo, list)

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

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

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

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

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

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

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

                        Комментарии

                        Только авторизованные пользователи могут публиковать комментарии.
                        Пожалуйста, авторизуйтесь или зарегистрируйтесь
                        AD

                        C++ - Тест 004. Указатели, Массивы и Циклы

                        • Результат:50баллов,
                        • Очки рейтинга-4
                        m
                        • molni99
                        • 25 октября 2024 г. 22:37

                        C++ - Тест 004. Указатели, Массивы и Циклы

                        • Результат:80баллов,
                        • Очки рейтинга4
                        m
                        • molni99
                        • 25 октября 2024 г. 22:29

                        C++ - Тест 004. Указатели, Массивы и Циклы

                        • Результат:20баллов,
                        • Очки рейтинга-10
                        Последние комментарии
                        i
                        innorwall14 ноября 2024 г. 8:42
                        Как Копировать Файлы в Linux If only females relatives with DZ offspring were considered these percentages were 23 order priligy online uk
                        i
                        innorwall14 ноября 2024 г. 6:09
                        Qt/C++ - Урок 068. Hello World с использованием системы сборки CMAKE в CLion ditropan pristiq dosing With the Yankees leading, 4 3, Rivera jogged in from the bullpen to a standing ovation as he prepared for his final appearance in Chicago buy priligy pakistan
                        i
                        innorwall14 ноября 2024 г. 1:05
                        EVILEG-CORE. Использование Google reCAPTCHA 2001; 98 29 34 priligy buy
                        i
                        innorwall14 ноября 2024 г. 1:00
                        PyQt5 - Урок 007. Работаем с QML QtQuick (Сигналы и слоты) priligy 30mg Am J Obstet Gynecol 171 1488 505
                        Сейчас обсуждают на форуме
                        i
                        innorwall14 ноября 2024 г. 0:39
                        добавить qlineseries в функции priligy amazon canada 93 GREB1 protein GREB1 AB011147 6
                        i
                        innorwall11 ноября 2024 г. 7:55
                        Всё ещё разбираюсь с кешем. priligy walgreens levitra dulcolax carbs The third ring was found to be made up of ultra relativistic electrons, which are also present in both the outer and inner rings
                        9
                        9Anonim25 октября 2024 г. 6:10
                        Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…
                        ИМ
                        Игорь Максимов3 октября 2024 г. 1:05
                        Реализация навигации по разделам Спасибо Евгений!

                        Следите за нами в социальных сетях