Запись имен файлов изображений в папках в текстовый файл C ++

0

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

Мне нужно это, чтобы проверить, является ли это папкой, а затем добавить правильный текст в текст для изображений, которые могут находиться в подпапке, например, вложенную папку /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);
    }
}
  • 1
    Вам нужно сделать listFile рекурсивной функцией. Сделайте так, чтобы он принимал единственный параметр, который является именем каталога, который нужно прочитать. Тогда вы можете просто позвонить в любой каталог, с которым вы столкнетесь.
Теги:
file-io
input
output

1 ответ

1

Чтобы перемещаться по каталогам, вы, вероятно, должны будете изменить свой код так, чтобы у вас была функция, которая принимает имя каталога, и перечисляет обычные файлы в этом каталоге. Если он находит каталог, он должен вызывать рекурсивно с конкатенированным именем текущего каталога и найденного каталога.

Чтобы определить, является ли файл каталогом, вы можете использовать что-то вроде entry.d_type == DT_DIR.

  • 0
    Мне удалось добавить некоторый код, чтобы он определял, является ли он каталогом, а затем переходит в другую функцию. Однако у меня возникли проблемы с передачей правильного имени каталога, в котором он остановился. Кроме того, я не совсем уверен, как бы я тогда рекурсивно проходил по этому каталогу со списком файлов.
  • 0
    Вам понадобится локальная переменная для хранения нового имени каталога (размером PATH_MAX), которое создается путем добавления вновь найденного каталога к текущему входу в функцию. Затем перезвоните в функцию с новым путем. Простое манипулирование строками, правда.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню