Windows要引入的头文件是<Windows.h>

主要是两个函数FindFirstFile、FindNextFile

MSDN里是这么说的:

FindFirstFile function

Searches a directory for a file or subdirectory with a name that matches a specific name (or partial name if wildcards are used).

这个函数是用来在给定目录下搜索某个文件用的(比如指定一个特定的文件名,看它是不是在那个目录),如果要实现枚举所有文件名,就要用通配符来匹配文件名:比如最常用的

‘*’就表示匹配所有文件名(也包括了'.'和'..')

FindNextFile function

Continues a file search from a previous call to the FindFirstFileFindFirstFileEx, or FindFirstFileTransacted functions.

这个是紧接着上一个函数调用来查找剩下的满足条件的文件名的。

这两个函数配合起来,就能用于枚举指定目录下的所有文件名:

vector<string> getFileNames(const string& inputDir, const string& filter=“*”) {
vector<string> result;
WIN32_FIND_DATA ffd;
HANDLE hFind = INVALID_HANDLE_VALUE;
hFind = FindFirstFile((inputDir + filter).c_str(), &ffd);
if (INVALID_HANDLE_VALUE == hFind){
perror("FindFirstFile Error\n");
exit(-1);
}
do {
if (!(ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) {
result.push_back(ffd.cFileName);
}
} while (FindNextFile(hFind, &ffd) != 0);
FindClose(hFind);
return result;
}

  通过指定filter参数,这个函数还有匹配特定名字的文件的能力,比如我要搜索目录下所有的.lib文件,可以这么写getFileNames(inputDir, "*.lib");

还有一点要注意的是,搜索的时候inputDir是和filter连起来组成一个路径的,所以inputDir结尾要加上"\\":比如"C:\\User\\somebody\\"

在linux下要引入的头文件是<dirent.h>

主要的两个函数是:

DIR *opendir(const char *pathname);

struct dirent *readdir(DIR *dp);

这两个函数的设计就更像我们读取一个文件时的做法了,先打开,然后每次读的时候,返回一个目录项(可能是子目录,也可能是文件)

vector<string> getFileNames(const string& inputDir){
vector<string> result;
auto hFind = opendir(inputDir.c_str());
struct dirent* ffd;
ffd = readdir(hFind);
while(ffd != NULL){
if(ffd->d_type != DT_DIR){
result.push_back(ffd->d_name);
}
ffd = readdir(hFind);
}
return result;
}

可以发现,这个api就没有了在windows 下,过滤文件名的能力,所以在指定路径的时候也可以不加最后的“//”(加上也不会错!)。

最新文章

  1. Android 设置启动界面
  2. @MappedSuperclass的用法
  3. UIScrollView控件实现图片缩放功能
  4. Fragemnt和TextView的交互(TextView在LinearLayout中)
  5. java获取静态页面内容
  6. python 学习5--matplotlib画图实践
  7. PHP笔记(一)
  8. JavaScript中Eval()函数的使用
  9. VS2015中添加新建项,找不到ado .net entity datamodel的解决方法
  10. python运维开发(十七)----jQuery续(示例)web框架django
  11. python 中文字数统计/分词
  12. PHP之流程的控制
  13. 深入理解计算机系统(2.3)------布尔代数以及C语言运算符
  14. hdu4678 Mine 2013 Multi-University Training Contest 8 博弈题
  15. Linux的常用命令(2) - 关机
  16. 教你如何使用Java手写一个基于链表的队列
  17. 多人聊天室(Java)
  18. idea在本地调试,spark创建hiveContext的时候报错
  19. 微信JSAPI分享朋友圈调试经验:invalid signature签名错误排查
  20. 《C#从现象到本质》读书笔记(六)第8章委托和事件

热门文章

  1. 【bzoj1027】合金
  2. C#的对象内存模型
  3. FileReader本地预览图片
  4. IE6 IE7 hasLayout bug之li间的3px垂直间距
  5. Python 练习 11
  6. 关于iOS7 设计师需要了解的十件事
  7. 《Pro AngularJS》学习小结-02
  8. Introduction to Windows 8: The Definitive Guide for Developer
  9. div在固定高的文字垂直居中
  10. Struts+Spring+Hibernate整合入门详解