将目录中的所有文件名保存到向量

时间:2010-03-08 19:37:40

标签: c++

我需要将目录中的所有“.xml”文件名保存到向量中。长话短说,我不能使用dirent API。似乎C ++没有任何“目录”的概念。

一旦我在一个向量中有文件名,我就可以遍历并“fopen”这些文件。

有没有一种简单的方法可以在运行时获取这些文件名?

4 个答案:

答案 0 :(得分:8)

简单的方法是使用Boost.Filesystem库。

namespace fs = boost::filesystem;
// ...
std::string path_to_xml = CUSTOM_DIR_PATH;
std::vector<string> xml_files;
fs::directory_iterator dir_iter( static_cast<fs::path>(path_to_xml) ), dir_end;
for (; dir_iter != dir_end; ++dir_iter ) {
  if ( boost::iends_with( boost::to_lower_copy( dir_iter->filename() ), ".xml" ) )
    xml_files.push_back( dir_iter->filename() );
}

答案 1 :(得分:3)

我建议看一下boost::filesystem是否应该是便携式的,并且提升不会太重。

答案 2 :(得分:3)

如果您不喜欢加强,请尝试Poco。它有一个DirectoryIterator。 http://pocoproject.org/

答案 3 :(得分:1)

像这样的东西(注意,格式是sprintf:ish功能你可以替换)

bool MakeFileList(const wchar_t* pDirectory,vector<wstring> *pFileList)
{
    wstring sTemp = Format(L"%s\\*.%s",pDirectory,L"xml");

    _wfinddata_t first_file;

    long hFile = _wfindfirst(sTemp.c_str(),&first_file);

    if(hFile != -1)
    {
        wstring sFile = first_file.name;
        wstring sPath = Format(L"%s%s",pDirectory,sFile.c_str());
        pFileList->push_back(sPath);

        while(_wfindnext(hFile,&first_file) != -1)
        {
            wstring sFile = first_file.name;
            wstring sPath = Format(L"%s%s",pDirectory,sFile.c_str());
            pFileList->push_back(sPath);
        }
        _findclose(hFile);
    }else
        return false;

    return true;    
}