Как обращаться к файлам в папке по расширению файла - PullRequest
0 голосов
/ 22 октября 2018

Я передаю строку, представляющую путь к папке, в качестве параметра для конструктора.

Имя папки, файлы в ней и их имена могут различаться, но расширения двух файлов всегда одинаковы:*.caffemodel и *.prototxt.

Как я могу ссылаться на эти два файла в указанном каталоге, используя их расширение, не сканируя всю папку, чтобы получить их полные имена?

Какпример вот код моего класса:

#include "NeuralClassifier.hpp"


NeuralClassifier::NeuralClassifier(std::string path)
{
  std::string modelName = path + "/*.caffemodel";
  std::string protoName = path + "/*.prototxt";
  cv::dnn::Net net;
  try {
    net = dnn::readNetFromCaffe(protoName, modelName);
  }
  catch (cv::Exception& e) {
    std::cerr << "Exception: " << e.what() << std::endl;
    if (net.empty())
    {
      std::cerr << "Can't load network by using the following files: " << std::endl;
      std::cerr << "prototxt:   " << protoName << std::endl;
      std::cerr << "caffemodel: " << modelName << std::endl;
      std::cerr << "bvlc_googlenet.caffemodel can be downloaded here:" << std::endl;
      std::cerr << "http://dl.caffe.berkeleyvision.org/bvlc_googlenet.caffemodel" << std::endl;
      exit(-1);
    }
  }
}

1 Ответ

0 голосов
/ 22 октября 2018

Ну, в какой-то момент операционной системе нужно знать точное имя файла, которое ваше приложение хочет открыть.В вашем случае вы указываете подстановочный знак '*', который не может соответствовать ни одному из нескольких файлов.

Если вы просто хотите открыть первый файл, соответствующий символу подстановки, вы можете использовать boost :: filesystem для упрощения обработки файлов:

Могу ли я использовать маску для итерации файлов вкаталог с Boost?

...