dirent.h头文件中包含了一些对文件目录进行操作的接口,虽然不是C标准中的,但是在C语言编程中是一类广泛使用的接口类型。可以通过这个头文件中的接口来查看文件目录中的文件列表,以及各个文件的信息大小等。一般情况下,vs或者vc6.0中是没有改头文件的。如果想在程序中使用,可以手动加入。下面是头文件的下载地址http://download.csdn.net/detail/qq_20916555/9488536 (本人上传的,免积分下载)
下面就对dirent中常用的数据类型以及接口作粗略的解释:
struct DIR {
struct dirent ent;
struct _WDIR *wdirp;
} ;
DIR结构体代表目录操作数据流,其中包括struct diren和struct_WDIR,一般通过接口opendir(const char*dirpath)返回来改目录的操作数据流。
下面是几个重要的接口函数;
DIR *opendir(const char*); //通过一个目录路径返回一个对该目录数据流操作的DIR,接下来对目录的读取和搜索都要使用此返回值.
struct dirent *readdir(DIR *) //返回当前DIR中的目录或者文件实体,当再次被调用调用的时候,该dirent指针指向下一个目录或者文件实体。当函数返回null的时候,说明指针已指向操作流的尾部。
void seekdir (DIR * dir, long int offset); //用来设置目录操作流的读取位置,调用seekdir函数的时候便从该位置进行读取。参数offset表示相对于文件目录开头的偏移量。
int telldir(DIR *dir) ;//返回当前目录流中指针位置。改位置是相对于文件开头偏移量的下一个实体读取位置的返回值。
实例程序:
程序功能:列出目录下所有文件和目录,注意文件目录的路径中不要包含中文,否则无法识别。
#include <iostream> #include <windows.h> #include "dirent.h" using namespace std; int main() { int filesize = 0; DIR *dirptr=NULL; int i=1; struct dirent *entry; if((dirptr = opendir("E:\\debug"))==NULL) { printf("opendir failed!"); return 1; }else { while(entry=readdir(dirptr)) { printf("filename%d = %s",i,entry->d_name); //输出文件或者目录的名称,一般文件含格式名,目录没有格式名 printf("filetype = %d\n",entry->d_type); //输出文件类型 i++; } closedir(dirptr); } return 0; }
文件类型:
由程序运行结果可以知道普通文件类型的type为32768
目录类型为1638
注意:
其中.表示当前目录
..表示当前目录的上一层目录。