使用_findfirst和_findnext遍历目录
最近在学习文件操作,用到了_findfirst() 和_findnext() 两个函数,写了个小程序,输入一个目录名,输出它下面的文件和目录。
主要用到了这么几个CRT函数:
_access(); /*判断文件或文件夹路径是否合法*/
_chdir(); /*切换当前工作目录*/
_findfirst(); /*查找第一个符合要求的文件或目录*/
_findnext(); /*查找下一个*/
_findclose(); /*关闭查找*/
函数的详细信息请参照msdn。
代码如下:
- #include "io.h"
- #include "direct.h"
- #include <iostream>
- using std::cin;
- using std::cout;
- using std::endl;
- using std::cerr;
- #include <string>
- using std::string;
- int main()
- {
- string dir;
- cout << "Input the name of directory: ";
- cin >> dir;
- if (_access(dir.c_str(), 06) == -1)
- {
- cerr << "error: directory does not exist." << endl;
- exit(-1);
- }
- if (dir.at(dir.length() - 1) != '\\')
- {
- dir += '\\';
- }
- if (_chdir(dir.c_str()) != 0)
- {
- cerr << "error: function _chdir() failed.";
- exit(-1);
- }
- _finddata_t fileinfo;
- memset(&fileinfo, 0x0, sizeof(fileinfo));
- intptr_t iFind = _findfirst("*", &fileinfo);
- if (iFind == -1)
- {
- cerr << "error: function _findfirst failed." << endl;
- exit(-1);
- }
- string filePath(dir + fileinfo.name);
- cout << "name: " << filePath << endl;
- while (_findnext(iFind, &fileinfo) == 0)
- {
- filePath = dir + fileinfo.name;
- cout << "name: " << filePath << endl;
- }
- _findclose(iFind);
- return 0;
- }
这是个简单的小程序,在vs2008下测试可以正常运行。
在这里提醒同样用到这几个函数的朋友,_findnext() 函数在成功时的返回值为0. 一般返回值为0,意思是为假,意味着失败。但CRT中很多函数在成功时返回0,类似的还有strcmp() 等。
我在首次使用时就犯了这个错误,意味_findnext() 成功时返回值 != 0,导致浪费了半天时间来Debug,后来仔细看msdn才纠正过来。
转载:http://blog.csdn.net/selina6874/article/details/6784697
使用_findfirst和_findnext遍历目录相关推荐
- Linux和Windows的遍历目录下所有文件的方法对比
首先两者读取所有文件的方法都是采用迭代的方式,首先用函数A的返回值判断目录下是否有文件,然后返回值合法则在循环中用函数B直到函数B的返回值不合法为止.最后用函数C释放资源. 1.打开目录 #inclu ...
- C语言遍历目录文件并排序
有时候需要遍历目录文件,但是默认的函数并不支持指定排序的功能,现在介绍一种排序的遍历目录方式,默认按照文件名的数字进行排序 window版本 string split_pathexe(string s ...
- C/C++ 用 _findfirst 与 _findnext 查找文件
头文件 <io.h> 结构体 struct _finddata_t {unsigned attrib;time_t time_create; time_t time_access; tim ...
- C++用 _findfirst 和 _findnext 查找文件
一.这两个函数均在io.h里面. 二.首先了解一下一个文件结构体: struct _finddata_t { unsigned attrib; time_t tim ...
- C++利用 _findfirst与_findnext查找文件的方法
C++ 文件查找 在C++中我们要如何查找文件呢?我们需要一个结构体和几个大家可能不太熟悉的函数.这些函数和结构体在的头文件中,结构体为struct _finddata_t ,函数为_findfirs ...
- C++ 文件查找 _findfirst、_findnext和_fineclose的使用
C++ 文件查找 在C++中我们要如何查找文件呢?我们需要一个结构体和几个大家可能不太熟悉的函数.这些函数和结构体在的头文件中,结构体为struct _finddata_t ,函数为_findfirs ...
- linux c 遍历目录 及 目录下文件
目录 递归实现 非递归实现 我们知道,许多操作系统中的目录结构都是使用树结构. 使用递归的方法定义树是比较容易的.一棵树地一些节点的集合. 这个集合可以为空,若非空,则树由树根和0个或者多个非空的子树 ...
- window和linux下遍历目录的比较
window下,遍历目录主要是用FindFirstFile和FindNextFile,而linux下是用opendir和readdir实现 void scanFile(char *szDir) {WI ...
- 在Linux下和Windows下遍历目录的方法及如何达成一致性操作
最近因为测试目的需要遍历一个目录下面的所有文件进行操作,主要是读每个文件的内容,只要知道文件名就OK了.在Java中直接用File类就可以搞定,因为Java中使用了组合模式,使得客户端对单个文件和文件 ...
最新文章
- POJ 3278 Catch That Cow
- Javascript日期时间总结
- 冰墩墩+周杰伦也救不了NFT
- Android 为控件设置阴影
- 程序员面试金典 - 面试题 16.16. 部分排序(排序/不排序)
- Twproject Gantt – 开源的 JavaScript 甘特图组件
- 走迷宫(三):在XX限制条件下,是否走得出。
- visualboyadvance滤镜_研究VisualBoyAdvance的请进
- matlab 脉冲频域压缩,大作业-雷达线性调频脉冲压缩的原理及其MATLAB仿真.doc
- 从产品驱动看专注和结果导向的关系
- python保存简单网页图片到本地(详细步骤)
- 域名注册及免费空间and企业邮箱
- MBA书籍推荐:打造商业思维,看这一本书就够了
- (十二)简单说一说drop、delete与truncate的区别
- balsamiq mockups 3安装
- 数据库设计(一) 需求分析
- 关于接口测试自动化的总结与思考
- GNOME Shell加速演进:BoxPointer, AppMenu和Magnifier
- 浅谈LCD液晶屏和电子墨水屏的区别
- i510210u和i78565u差距多大