用C语言列出目录下的文件,在linux下可采用readdir()函数来实现,代码实现过程为:
-
打开目录
-
循环读目录,输出目录下文件
-
关闭目录指针
参考代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 | #include <dirent.h> #include <stdio.h> int main() { DIR *dirp; struct dirent *dp; dirp = opendir( "." ); //打开目录指针 while ((dp = readdir(dirp)) != NULL) { //通过目录指针读目录 printf ( "%s\n" , dp->d_name ); } ( void ) closedir(dirp); //关闭目录 return 0; } |
在windows下,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | #include <io.h> #include <stdio.h> void printDir( const char * path ) { struct _finddata_t data; long hnd = _findfirst( path, &data ); // 查找文件名与正则表达式chRE的匹配第一个文件 if ( hnd < 0 ) { perror ( path ); } int nRet = (hnd <0 ) ? -1 : 1; while ( nRet >= 0 ) { if ( data.attrib == _A_SUBDIR ) // 如果是目录 printf ( " [%s]*\n" , data.name ); else printf ( " [%s]\n" , data.name ); nRet = _findnext( hnd, &data ); } _findclose( hnd ); // 关闭当前句柄 } void main() { printDir( "d:/*.*" ); } |
相关函数说明:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | long _findfirst( char *filespec, struct _finddata_t *fileinfo ); // 功 能 : 提供与filespec指定入口泛式匹配的第一个文件.通常后继用_findnext()函数来完成某泛式下的文件遍历. // 头文件 : #include <io.h> // 参 数 : filespec - 目标文件规范,可以包含通配符 // fileinfo - 文件信息buffer // 返回值 : 成功返回唯一的搜索句柄 // 出错返回-1,且设置errno为如下值: // ENOENT 该泛式无法匹配 // EINVAL 无效文件名 int _findnext( long handle, struct _finddata_t *fileinfo ); // 功 能 : 按照前面_findfirst中的泛式规则,查找下一个符合该泛式的文件,并以此为依据修改fileinfo中的值 // 头文件 : #include <io.h> // 参 数 : long handle - 搜索句柄(通常由紧靠其前的_findfirst()返回) // fileinfo - 文件信息buffer // 返回值 : 成功返回0 // 出错返回-1 int _findclose( long handle ); // 功 能 : 关闭搜寻句柄并释放相应资源 // 头文件 : #include <io.h> // 参 数 : long handle - 搜索句柄(通常由紧靠其前的_findfirst()返回) // 返回值 : 成功返回0 // 出错返回-1 |