LCCCCC


爱宝宝,爱学习,爱生活的SZUer.


首页

遍历文件夹内文件名

遍历文件夹内文件名方法

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
最近的文章

个人使用的效率工具

1 QTranslate(翻译软件)个人一般只开启Google和DeepL翻译。只使用Ctrl+Q功能完全够用。官方链接:https://quest-app.appspot.com/DeepL支持中文: 替换下面的js文件Service.js2 天若OCR文字识别V4.48(OCR)个人觉得最好用的OCR。官方链接:https://tianruoocr.cn/个人使用版本:天若OCR文字识别V4.48.zip自行申请百度识别接口,免费的完全够个人使用。3 CLaunch(快速启动)推荐使用...…

原创分享继续阅读
更早的文章

OpenCV 16位图像转8位图像

记录一下 OpenCV 中 16 位图像转 8 位图像double min, max;cv::minMaxIdx(img, &min, &max);result.convertTo(img_8u, CV_8UC1, 255.0 / (max - min), -255.0*min / (max - min));…

原创分享继续阅读