Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何按文件扩展名引用文件夹中的文件_C++_Filenames_File Extension - Fatal编程技术网

C++ 如何按文件扩展名引用文件夹中的文件

C++ 如何按文件扩展名引用文件夹中的文件,c++,filenames,file-extension,C++,Filenames,File Extension,我正在将表示文件夹路径的字符串作为参数传递给构造函数 文件夹名称、其中的文件及其名称可以不同,但两个文件的扩展名始终相同: *.caffemodel和*.prototxt 如何使用扩展名引用指定目录中的这两个文件,而不必扫描整个文件夹以获取其完整名称 下面是我的类的代码示例: #include "NeuralClassifier.hpp" NeuralClassifier::NeuralClassifier(std::string path) { std::string modelNam

我正在将表示文件夹路径的字符串作为参数传递给构造函数

文件夹名称、其中的文件及其名称可以不同,但两个文件的扩展名始终相同:
*.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);
    }
  }
}
#包括“neuralclassizer.hpp”
NeuralClassifier::NeuralClassifier(标准::字符串路径)
{
std::string modelName=path+“/*.caffemodel”;
std::string protoName=path+“/*.prototxt”;
cv::dnn::Net;
试一试{
net=dnn::readNetFromCaffe(原型名、模型名);
}
捕获(cv::异常和e){

std::cerr有时候,操作系统需要知道应用程序要打开的确切文件名。在本例中,您可以指定一个通配符“*”,该通配符可以将任何文件与多个文件匹配

如果只想打开与通配符匹配的第一个文件,可以使用boost::filesystem来简化文件处理:


这不是一个C++特定的问题,即使你要对某个*nix实用程序进行系统调用;我认为没有任何文件系统在不扫描目录中的节点的情况下支持这个;我可能错了,我很高兴在这个方面被纠正……好奇的是,如果你已经有了<代码>路径<代码>,什么阻止了YO?您是否希望将
文件名
指定为类中的某些字段,在构造函数中使用getter/setter和/或额外参数,或者更好地使用整个路径作为构造函数中的参数?谢谢您的回复。假设我有许多不同的文件夹,并且这些文件夹中的文件名发生更改。我想测试代码使用不同的型号(基本上加载不同的文件夹)因此,我不是每次都重写路径和文件名,有时它们又长又无聊,而是认为可以只更改路径。显然,根据你所说的,不扫描目录或使用正则表达式是不可能的。@FrancescoBoi我明白了。那么我想文件夹路径也是一样的其他地方的一些代码对其进行了评级。如果您只是增强生成文件夹路径的代码,以生成文件的完整路径,而不是尝试通过扩展名对文件名进行特殊处理,可能会更整洁。文件夹和模型不是由我的代码生成的,而是由其他工作生成的。我想以其他人训练的模型为例。