遍历文件夹内文件名 遍历文件夹内文件名方法 Qt Boost 批处理

遍历文件夹内文件名方法

Qt

///************************************
// @function:    getFileList
// @brief:  遍历文件夹及其子文件夹
// @arg[in] path: 父文件夹
// @arg[in] contains: 包含字符
// @return: QFileInfoList 文件名列表 QFileInfoList::absoluteFilePath()返回绝对目录
///************************************
inline QFileInfoList getFileList(QString path, QString contains)
{
    QDir dir(path);
    QFileInfoList folder_list = dir.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot);
    dir.setFilter(QDir::Files | QDir::NoSymLinks);
    QStringList filters;
    filters << QStringLiteral("%1").arg(contains);
    dir.setNameFilters(filters);
    QFileInfoList file_list = dir.entryInfoList(filters);    
    for (int i = 0; i != folder_list.size(); ++i)
    {
        QString name = folder_list.at(i).absoluteFilePath();
        QFileInfoList child_file_list = getFileList(name, contains);
        file_list.append(child_file_list);
    }
    return file_list;
}

Boost

///************************************
// @function:    StringContains
// @brief:  字符串包含
// @arg[in] str: 字符串
// @arg[in] contains: 包含子字符
// @return: bool true false
///************************************
inline bool StringContains(const std::string &str, const char* contains)
{
    std::string::size_type position;
    position = str.find(contains);
    if (position != str.npos)
        return true;
    return false;
}
///************************************
// @function:    GetFilenames
// @brief:  遍历目录中的子文件
// @arg[in] dir: 父目录
// @arg[out] filenames: 文件名列表(绝对目录)
// @return: int 文件数目
///************************************
inline int GetFilenames(const std::string& dir, std::vector<std::string>& filenames)
{
    boost::filesystem::path path(dir);
    if (!boost::filesystem::exists(path))
    {
        return -1;
    }
    if (boost::filesystem::is_regular_file(path))
    {
        filenames.push_back(dir);
        return 0;
    }
    boost::filesystem::directory_iterator end_iter;
    for (boost::filesystem::directory_iterator iter(path); iter != end_iter; ++iter)
    {
        if (boost::filesystem::is_regular_file(iter->status()))
        {
            std::string filename = iter->path().string();
            if (StringContains(filename, ".bmp") ||
                StringContains(filename, ".png") ||
                StringContains(filename, ".jpg"))
                filenames.push_back(iter->path().string());
        }
        if (boost::filesystem::is_directory(iter->status()))
        {
            GetFilenames(iter->path().string(), filenames);
        }
    }
    return static_cast<int>(filenames.size());
}

批处理

DIR *.*  /B >LIST.TXT