Считать информацию из всех файлов в папке

Задача стоит следующим образом. У меня имеется N файлов в папке, надо при вызове функции считать информацию из первого файла, и при последующих вызовах чтобы функция читала информацию из следующего файла который есть в папке.

Например есть условная папка с условными файлами:

  • Level1
  • Level2
  • Level3

Я вызываю функцию, она считывает информацию из файла Level1, следующий раз вызываю считывает информацию из Level2 и так далее пока не кончатся файлы.


Ответы (2 шт):

Автор решения: Глеб Труфанов

Надеюсь, никто Вас (а самое главное, чтобы и Вы сами) не ограничивает в стандарте С++, и Вы, как современный адекватный программист С++, будете использовать, как минимум, С++17. Так вот в С++ можно сделать так:

#include <string>
#include <iostream>
#include <filesystem>
namespace fs = std::filesystem;
        
int main() {
std::string path = "/path/to/directory"; // Путь к папке
for (const auto& entry : fs::directory_iterator(path))
    std::cout << entry.path() << std::endl;
}

Благодаря entry.path() ты получаешь путь к файлу в папке, который можно считать уже любым известным тебе способом, например, через модуль <fstream>. И никаких статических переменных в функции не надо, все файлы просто в цикле пройдутся и всё. Однако стоит заметить, что directory_iterator не посещает подкаталоги. Для посещения всех подкаталогов нужен recursive_directory_iterator

→ Ссылка
Автор решения: Mikhailo

Можно сделать так:

#include <filesystem>

using namespace std;
using namespace std::filesystem;

bool doFile() {
    static directory_iterator di(".");
    static auto it = begin(di);

    if (it == end(di)) return false;


    // Работа с it
    cout << it->path() << endl;


    it++;
    return true;
    }

Если функция вернула false - файлы закончились. Простейший пример - while(doFile());

→ Ссылка