根据扩展名比较2个字符串以排除

时间:2011-04-07 14:17:31

标签: c++

我看过这篇文章:Find if string ends with another string in C++

我正在努力实现类似的目标。

基本上我想从目录中获取一个文件列表,并过滤掉任何不以指定的允许扩展结束的文件,以便在我的程序中进行处理。

在java中,这将通过创建一个方法并将扩展名作为字符串传递然后在以下语句中使用.endswith来执行。 C ++似乎不支持这个,所以我该怎么做呢?

   for (int fileList = 0; fileList < files.length; fileList++)
   {
      //output only jpg files, file list is still full
      if(files[fileList].toString().endsWith(extension))
      {
          images.add(files[fileList]);
      }//end if
   }//end for

提前致谢

3 个答案:

答案 0 :(得分:2)

bool endsWith(std::string const & s, std::string const & e) {
    if (s.size() < e.size())
        return false;
    return s.substr(s.size() - e.size()) == e;
}

答案 1 :(得分:1)

如果使用boost :: filesystem,那么你可以试试

#include <boost/filesystem.hpp>
//...

boost::filesystem::path dir_path ("c:\\dir\\subdir\\data");
std::string extension(".jpg");
for (boost::filesystem::directory_iterator it_file(dir_path);
     it_file != boost::filesystem::directory_iterator();
     ++it_file)
{
  if ( boost::filesystem::is_regular_file(*it_file) &&
       boost::filesystem::extension(*it_file) == extension)
  {
    // do your stuff
  }
}

这将解析给定的目录路径,然后您只需要过滤所需的extension.t

答案 2 :(得分:0)

下一个示例检查文件名是否以jpg扩展名结尾:

#include <iostream>
#include <string>
using namespace std;


bool EndsWithExtension (const string& str,const string &extension)
{
    size_t found = str.find_last_of(".");
    if ( string::npos != found )
    {
        return (extension == str.substr(found+1) );
    }

    return false;
}

int main ()
{
  string filename1 ("c:\\windows\\winhelp.exe");
  string filename2 ("c:\\windows\\other.jpg");
  string filename3 ("c:\\windows\\winhelp.");

  cout << boolalpha << EndsWithExtension(filename1,"jpg") << endl;
  cout << boolalpha << EndsWithExtension(filename2,"jpg") << endl;
  cout << boolalpha << EndsWithExtension(filename3,"jpg") << endl;
}