C ++ Чтение всего файлового каталога - PullRequest
1 голос
/ 21 июня 2020

Я сделал небольшую программу, которая читает определенное количество текстовых файлов и извлекает из них некоторую целевую информацию. Однако это зависит от того, что я добавлю все эти текстовые файлы в папку проекта и переименую каждый из них по отдельности, чтобы придать их именам шаблон. папка (названная по указанному в ней пути) независимо от имен и независимо от количества файлов в папке.

Я новичок в программировании, поэтому был бы очень признателен, если бы все шаги были объяснены как простые насколько это возможно, чтобы я мог извлечь уроки из этого:)

Большое спасибо!

Ответы [ 2 ]

4 голосов
/ 21 июня 2020

Вы хотите использовать std::filesystem::directory_iterator в стандартной библиотеке C ++ 17. Минимальный пример:

#include <filesystem>
#include <fstream>
int main()
{
    for (auto& file : std::filesystem::directory_iterator{ "." })  //loop through the current folder
    {
        std::ifstream fs{ file.path() };    //open the file
        //or because directory_entry is implicit converted to a path, so you can do 
        //std::ifstream fs{ file };
        //... process the file
    }
}
0 голосов
/ 21 июня 2020
#include <iostream>
#include <dirent.h>
#include <fstream>
#include <sys/types.h>

using namespace std;
vector<string> list_dir(const char *path) {
vector<string> AllFilesName;
struct dirent *entry;
DIR *dir = opendir(path);

if (dir == NULL) {
   return;
   }

//readdir return a pointer to the entry of a folder (could be any type not only .txt)

while ((entry = readdir(dir)) != NULL) {
   AllFilesName.push_back(entry->d_name);
//push the name of every file
}
   closedir(dir);
return AllFilesName; 
}
string readFile(string name){
    ifstream inFile;
    inFile.open("C:\\temp\\"+name);//concatenate the name with the directory path
//just replace your folder path with C:\\temp
    while(inFile >> x) {
        //x is the content of the file do whatever you want
    }
    //return the contetn of the text 
}
int main() {
   vector<string> nameOfFiles = list_dir("/home/username/Documents");
   for(int i=0;i<nameOfFiles.size();i++){
       string contentOfTheFile = readFile(nameOfFiles[i]);//read the folder know as you like 
   }
return 0;
}
...