Я написал немного кода, чтобы легко добавлять имена файлов изображений, которые у меня были в каталоге, и добавлять их в список в текстовом файле. Это работало нормально, но когда изображения находились внутри подпапки, это просто добавило бы имя папки в качестве записи в текстовый файл.
Мне нужно это, чтобы проверить, является ли это папкой, а затем добавить правильный текст в текст для изображений, которые могут находиться в подпапке, например, вложенную папку /image.jpg
Не могу решить, что мне нужно добавить. Это то, что у меня есть до сих пор...
#include<stdio.h>
#include<cstdlib>
#include<iostream>
#include<string.h>
#include<fstream>
#include<dirent.h>
void listFile();
std::ofstream myfile;
int main(){
listFile();
return 0;
}
void listFile(){
DIR *pDIR;
struct dirent *entry;
if( pDIR=opendir("/home/hduser/Example2Files/TrainImages/") ){
while(entry = readdir(pDIR)){
if( strcmp(entry->d_name, ".") != 0 && strcmp(entry->d_name, "..") != 0 )
myfile.open ("/home/hduser/Example2Files/TrainImages/train.txt",std::ios_base::app);
myfile << entry->d_name << "\n";
myfile.close();
}
closedir(pDIR);
}
}
Чтобы перемещаться по каталогам, вы, вероятно, должны будете изменить свой код так, чтобы у вас была функция, которая принимает имя каталога, и перечисляет обычные файлы в этом каталоге. Если он находит каталог, он должен вызывать рекурсивно с конкатенированным именем текущего каталога и найденного каталога.
Чтобы определить, является ли файл каталогом, вы можете использовать что-то вроде entry.d_type == DT_DIR
.
listFile
рекурсивной функцией. Сделайте так, чтобы он принимал единственный параметр, который является именем каталога, который нужно прочитать. Тогда вы можете просто позвонить в любой каталог, с которым вы столкнетесь.