#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. jQuery代码片段

    禁用页面右键菜单 $(document).bind('contextmenu', function(){ return false; }); 浏览器判断 $.browser.version $.bro ...

  2. WordPress插件制作教程(七): 插件函数之过滤器(Filter)函数

    上一篇对插件函数之动作(Action)函数做了下介绍,这篇在介绍下过滤器(Filters). 过滤器是一类函数,WordPress执行传递和处理数据的过程中,在针对这些数据做出某些动作之前的特定运行( ...

  3. requestAnimationFrame动画方法

    一.动画方式 在HTML5/CSS3时代,实现动画的方式有许多种: 你可以用css3的animation和@keyframes: 可以用css3的transition: 还可以用原始的setTimeo ...

  4. C 程序提升效率的10种方法

    本文向你介绍规范你的C代码的10种方法(引用地址http://forum.eepw.com.cn/thread/250025/1).   1. 避免不必要的函数调用 考虑下面的2个函数: void s ...

  5. 匹配“is outside location”

    <pre name="code" class="html">is outside location 怎么匹配? . 匹配除换行外的所有单个字符,通常 ...

  6. windows phone因为墓碑化导致“正在恢复”的分析

    我们在平时的WP使用过程中,会遇到一个问题 应用在切出,切回后, 有时候,会显示"正在恢复",并等待时间较长,才能回到用户切出时候的画面,但是这种情况并非常见,偶尔发生 有时候,直 ...

  7. SQLite-CONSTRAINTS(约束)

    SQLite – CONSTRAINTS(约束) 约束是数据列在表上执行的规则.这些是用来限制的数据类型可以进入一个表.这样可以确保数据的准确性和可靠性在数据库中. 级或表级约束可以列.列级约束是仅适 ...

  8. nodejs 设置网络代理

    在使用nodejs的过程中,加入使用代理上网,那么安装组件会失败,此时配置代理即可,命令如下: [root@oracle ~]#npm config set proxy=http://10.101.1 ...

  9. hadoop的thriftserver配置

    说明:hadoop版本:hadoop-1.2.1.tar.gz.linux系统12.04,不过这里跟系统无关,可能安装软件的命令有差别. 一.概述 默认的hbase安装包已经有了thrift服务,使用 ...

  10. UILabel+Create

    #import <UIKit/UIKit.h> @interface UILabel (Create) /** * 创建普通Label * * @param frame frame * @ ...