Считать информацию из всех файлов в папке
Задача стоит следующим образом. У меня имеется 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
Можно сделать так:
#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());