最近在学习文件操作,用到了_findfirst() 和_findnext() 两个函数,写了个小程序,输入一个目录名,输出它下面的文件和目录。

主要用到了这么几个CRT函数:

_access(); /*判断文件或文件夹路径是否合法*/

_chdir(); /*切换当前工作目录*/

_findfirst(); /*查找第一个符合要求的文件或目录*/

_findnext(); /*查找下一个*/

_findclose(); /*关闭查找*/

函数的详细信息请参照msdn。

代码如下:

view plain
  1. #include "io.h"
  2. #include "direct.h"
  3. #include <iostream>
  4. using std::cin;
  5. using std::cout;
  6. using std::endl;
  7. using std::cerr;
  8. #include <string>
  9. using std::string;
  10. int main()
  11. {
  12. string dir;
  13. cout << "Input the name of directory: ";
  14. cin >> dir;
  15. if (_access(dir.c_str(), 06) == -1)
  16. {
  17. cerr << "error: directory does not exist." << endl;
  18. exit(-1);
  19. }
  20. if (dir.at(dir.length() - 1) != '\\')
  21. {
  22. dir += '\\';
  23. }
  24. if (_chdir(dir.c_str()) != 0)
  25. {
  26. cerr << "error: function _chdir() failed.";
  27. exit(-1);
  28. }
  29. _finddata_t fileinfo;
  30. memset(&fileinfo, 0x0, sizeof(fileinfo));
  31. intptr_t iFind = _findfirst("*", &fileinfo);
  32. if (iFind == -1)
  33. {
  34. cerr << "error: function _findfirst failed." << endl;
  35. exit(-1);
  36. }
  37. string filePath(dir + fileinfo.name);
  38. cout << "name: " << filePath << endl;
  39. while (_findnext(iFind, &fileinfo) == 0)
  40. {
  41. filePath = dir + fileinfo.name;
  42. cout << "name: " << filePath << endl;
  43. }
  44. _findclose(iFind);
  45. return 0;
  46. }

这是个简单的小程序,在vs2008下测试可以正常运行。
在这里提醒同样用到这几个函数的朋友,_findnext() 函数在成功时的返回值为0. 一般返回值为0,意思是为假,意味着失败。但CRT中很多函数在成功时返回0,类似的还有strcmp() 等。

我在首次使用时就犯了这个错误,意味_findnext() 成功时返回值 != 0,导致浪费了半天时间来Debug,后来仔细看msdn才纠正过来。

转载:http://blog.csdn.net/selina6874/article/details/6784697

使用_findfirst和_findnext遍历目录相关推荐

  1. Linux和Windows的遍历目录下所有文件的方法对比

    首先两者读取所有文件的方法都是采用迭代的方式,首先用函数A的返回值判断目录下是否有文件,然后返回值合法则在循环中用函数B直到函数B的返回值不合法为止.最后用函数C释放资源. 1.打开目录 #inclu ...

  2. C语言遍历目录文件并排序

    有时候需要遍历目录文件,但是默认的函数并不支持指定排序的功能,现在介绍一种排序的遍历目录方式,默认按照文件名的数字进行排序 window版本 string split_pathexe(string s ...

  3. C/C++ 用 _findfirst 与 _findnext 查找文件

    头文件 <io.h> 结构体 struct _finddata_t {unsigned attrib;time_t time_create; time_t time_access; tim ...

  4. C++用 _findfirst 和 _findnext 查找文件

    一.这两个函数均在io.h里面.   二.首先了解一下一个文件结构体: struct _finddata_t {     unsigned    attrib;     time_t      tim ...

  5. C++利用 _findfirst与_findnext查找文件的方法

    C++ 文件查找 在C++中我们要如何查找文件呢?我们需要一个结构体和几个大家可能不太熟悉的函数.这些函数和结构体在的头文件中,结构体为struct _finddata_t ,函数为_findfirs ...

  6. C++ 文件查找 _findfirst、_findnext和_fineclose的使用

    C++ 文件查找 在C++中我们要如何查找文件呢?我们需要一个结构体和几个大家可能不太熟悉的函数.这些函数和结构体在的头文件中,结构体为struct _finddata_t ,函数为_findfirs ...

  7. linux c 遍历目录 及 目录下文件

    目录 递归实现 非递归实现 我们知道,许多操作系统中的目录结构都是使用树结构. 使用递归的方法定义树是比较容易的.一棵树地一些节点的集合. 这个集合可以为空,若非空,则树由树根和0个或者多个非空的子树 ...

  8. window和linux下遍历目录的比较

    window下,遍历目录主要是用FindFirstFile和FindNextFile,而linux下是用opendir和readdir实现 void scanFile(char *szDir) {WI ...

  9. 在Linux下和Windows下遍历目录的方法及如何达成一致性操作

    最近因为测试目的需要遍历一个目录下面的所有文件进行操作,主要是读每个文件的内容,只要知道文件名就OK了.在Java中直接用File类就可以搞定,因为Java中使用了组合模式,使得客户端对单个文件和文件 ...

最新文章

  1. POJ 3278 Catch That Cow
  2. Javascript日期时间总结
  3. 冰墩墩+周杰伦也救不了NFT
  4. Android 为控件设置阴影
  5. 程序员面试金典 - 面试题 16.16. 部分排序(排序/不排序)
  6. Twproject Gantt – 开源的 JavaScript 甘特图组件
  7. 走迷宫(三):在XX限制条件下,是否走得出。
  8. visualboyadvance滤镜_研究VisualBoyAdvance的请进
  9. matlab 脉冲频域压缩,大作业-雷达线性调频脉冲压缩的原理及其MATLAB仿真.doc
  10. 从产品驱动看专注和结果导向的关系
  11. python保存简单网页图片到本地(详细步骤)
  12. 域名注册及免费空间and企业邮箱
  13. MBA书籍推荐:打造商业思维,看这一本书就够了
  14. (十二)简单说一说drop、delete与truncate的区别
  15. balsamiq mockups 3安装
  16. 数据库设计(一) 需求分析
  17. 关于接口测试自动化的总结与思考
  18. GNOME Shell加速演进:BoxPointer, AppMenu和Magnifier
  19. 浅谈LCD液晶屏和电子墨水屏的区别
  20. i510210u和i78565u差距多大

热门文章

  1. 程序员用代码写合租广告,网友神评亮了
  2. mongodb 字符串查找匹配中$regex的用法
  3. bindService不调用onServiceConnected的问题
  4. Setup time 和 Hold time
  5. html表单新增类型,HTML5表单设计——新增输入类型和新增表单属性
  6. matlab算百人同生日概率
  7. JPEG文件格式介绍
  8. 数据库原理之数据库安全性(详细知识点)
  9. oppo手机刷linux,Ubuntu手机系统介绍及Ubuntu刷机教程分享
  10. 自定义鼠标滑过标签的title属性的样式