#include <string>
#include <vector>
#include <cstring>
#include <cstdio>
#include <dirent.h>
#include <sys/stat.h>
#include <sys/types.h> using std::strcmp;
using std::string;
using std::vector; #if __cplusplus < 201103L
#define nullptr NULL
#endif #define SEARCH_PATH_LENGTH 1024 /*
* 搜索一个文件夹下的符合条件的文件
*/
bool searchFile(const char* directory, vector<string>& files, const char* ext, int subdir_level)
{
const char* dir_path = directory; DIR *dir = nullptr; //打开文件夹
if((dir = opendir(dir_path)) == nullptr)
{
return false;
} struct dirent entry;
struct dirent* result;
struct stat file_stat; char cur_name[SEARCH_PATH_LENGTH]; //读取文件夹下的一个文件
while(readdir_r(dir, &entry, &result) == 0 && result)
{
const char* name = entry.d_name; //忽略掉.和..
if(strcmp(name, ".") == 0 || strcmp(name, "..") == 0)
continue; //检查拼接路径
int count = sprintf(cur_name, "%s", dir_path); count += sprintf(&cur_name[count], "%s%s", cur_name[count - 1] == '/' ? "" : "/", name); //获取文件的状态
if(lstat(cur_name, &file_stat) != -1)
{
//文件是普通文件
if(!S_ISDIR(file_stat.st_mode))
{
const char* rf = strrchr(cur_name, '.'); //检查文件的后缀名
if(rf != nullptr && strcmp(rf + 1, ext) == 0)
files.push_back(string(cur_name, count));
}
//文件是文件夹
else if(subdir_level >= 0)
{
//递归获取下一层目录的文件
searchFile(cur_name, files, ext, subdir_level - 1);
}
}
}
closedir(dir); return true;
}

C++ 查找文件夹下的文件的更多相关文章

  1. Linux 批量查找并替换文件夹下所有文件的内容

    1.批量查找某个目下文件的包含的内容 cd etc grep -rn "查找的内容" ./ 2.批量替换某个目下所有包含的文件的内容 cd etc sed -i "s/查 ...

  2. C#遍历文件夹下所有文件

    FolderForm.cs的代码如下: using System; using System.Collections.Generic; using System.Diagnostics; using ...

  3. python 替换 文件夹下的 文件名称 及 文件内容

    示例效果: 1.替换某文件夹下的 文件夹及子文件夹 的名称 由OldStrDir 变为 NewStrDir: 2.替换某文件夹下的 文件夹及子文件夹 下 所有的文件的名称 由OldStrFile 变为 ...

  4. java笔试题: ——将e:/source文件夹下的文件打个zip包后拷贝到f:/文件夹下面

    将e:/source文件夹下的文件打个zip包后拷贝到f:/文件夹下面 import java.io.*; import java.util.zip.ZipEntry; import java.uti ...

  5. 【转发】du命令 实现Linux 某个文件夹下的文件按大小排序

    1. df -lh 2. du -s /usr/* | sort -rn这是按字节排序 3. du -sh /usr/* | sort -rn这是按兆(M)来排序 4.选出排在前面的10个du -s ...

  6. java读取文件夹下所有文件并替换文件每一行中指定的字符串

    import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.I ...

  7. python (9)统计文件夹下的所有文件夹数目、统计文件夹下所有文件数目、遍历文件夹下的文件

    命令:os 用到的:os.walk   os.listdir 写的爬虫爬的数据,但是又不知道进行到哪了,于是就写了个脚本来统计文件的个数 #统计 /home/dir/ 下的文件夹个数 import o ...

  8. PHP遍历文件夹下的文件和获取到input name的值

    <?php$dir = dirname(__FILE__); //要遍历的目录名字 ->当前文件所在的文件夹//$dir='D:\PHP\wamp\www\admin\hosts\admi ...

  9. java中File类应用:遍历文件夹下所有文件

    练习: 要求指定文件夹下的所有文件,包括子文件夹下的文件 代码: package 遍历文件夹所有文件; import java.io.File; public class Test { public ...

  10. 【转】【Linux】Linux下统计当前文件夹下的文件个数、目录个数

    [转][Linux]Linux下统计当前文件夹下的文件个数.目录个数 统计当前文件夹下文件的个数,包括子文件夹里的 ls -lR|grep "^-"|wc -l 统计文件夹下目录的 ...

随机推荐

  1. IFS解惑

    一.IFS 介绍 Shell 脚本中有个变量叫 IFS(Internal Field Seprator) ,内部域分隔符.完整定义是The shell uses the value stored in ...

  2. No1_7.类和对象_Java学习笔记

    一.面向对象的特点:a.封装:封装是面向对象的核心思想,将对象的属性和行为封装起来的载体就是类,类通常对客户隐藏其实现细节,这就是封装的思想: 保证了类内部数据的完整性,应用该类的用户不能轻易直接操纵 ...

  3. C++常量指针与常量数据

    常量指针即指针是常量的,一但声明指向某个数据后不能被更改,但是指向的数据可以被更改.声明格式如下: ; int * const p = &demo; 常量数据是指数据是常量的,一但被初始化后不 ...

  4. 唯品会安卓版app分析

    .................................................................................................... ...

  5. FP—Growth算法

    FP_growth算法是韩家炜老师在2000年提出的关联分析算法,该算法和Apriori算法最大的不同有两点: 第一,不产生候选集,第二,只需要两次遍历数据库,大大提高了效率,用31646条测试记录, ...

  6. jquery checkbox 全选、取消全选

    $("#checkall").click(function(){ $("input[name='uid']").prop("checked" ...

  7. hdu 1732 Push Box

    http://acm.hdu.edu.cn/showproblem.php?pid=1732 推箱子和游戏规则一样. #include <cstdio> #include <cstr ...

  8. Linux下Bash运行脚本

    命令行应该这样写: sh -c "脚本字符串" example: sh -c "if ! type dpkg > /dev/null ; then echo 'so ...

  9. python 程序穩定性閒談-續集

    前文再續,書接上一回.上次總結python錯誤碼返回與異常機制共用的一些原則,毫無疑問地,仍會出現程序不穩定的現象(好吧,可能是我個人能力問題).在公司做的一個項目中,出現了因爲使用外部模塊造成pyt ...

  10. 【转】Linux下tar.xz结尾的文件的解压方法--不错

    原文网址:http://blog.csdn.net/silvervi/article/details/6325698 今天尝试编译内核,下载到了一份tar.xz结尾的压缩文件,网上解决方法比较少,不过 ...