中易网

怎样使用C语言列出某个目录下的文件?

答案:2  悬赏:10  
解决时间 2021-01-27 04:18
怎样使用C语言列出某个目录下的文件?
最佳答案
用C语言列出目录下的文件,在linux下可采用readdir()函数来实现,代码实现过程为:
打开目录
循环读目录,输出目录下文件
关闭目录指针
参考代码:
#include 
#include 
int main()
{
    DIR *dirp; 
    struct dirent *dp;
    dirp = opendir("."); //打开目录指针
    while ((dp = readdir(dirp)) != NULL) { //通过目录指针读目录
        printf("%s
", dp->d_name );
    }      
    (void) closedir(dirp); //关闭目录
    return 0;
}在windows下,代码如下:
#include 
#include 

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]*
", data.name );
        else
            printf("   [%s]
", data.name );
        nRet = _findnext( hnd, &data );
    }
    _findclose( hnd );     // 关闭当前句柄
}
void main()
{
printDir("d:/*.*");
}相关函数说明:
long _findfirst( char *filespec, struct _finddata_t *fileinfo );  
// 功  能 : 提供与filespec指定入口泛式匹配的第一个文件.通常后继用_findnext()函数来完成某泛式下的文件遍历.  
// 头文件 : #include   
// 参  数 : filespec - 目标文件规范,可以包含通配符  
//          fileinfo - 文件信息buffer  
// 返回值 : 成功返回唯一的搜索句柄  
//          出错返回-1,且设置errno为如下值:  
//          ENOENT 该泛式无法匹配  
//          EINVAL 无效文件名  
int _findnext( long handle, struct _finddata_t *fileinfo );  
// 功  能 : 按照前面_findfirst中的泛式规则,查找下一个符合该泛式的文件,并以此为依据修改fileinfo中的值  
// 头文件 : #include   
// 参  数 : long handle - 搜索句柄(通常由紧靠其前的_findfirst()返回)  
//          fileinfo    - 文件信息buffer  
// 返回值 : 成功返回0  
//          出错返回-1
int _findclose( long handle );  
// 功  能 : 关闭搜寻句柄并释放相应资源  
// 头文件 : #include   
// 参  数 : long handle - 搜索句柄(通常由紧靠其前的_findfirst()返回)  
// 返回值 : 成功返回0  
//          出错返回-1
全部回答
C语言本身没有提供象dir_list()这样的函数来列出某个目录下所有的文件。不过,利用C语言的几个目录函数,你可以自己编写一个dir_list()函数。首先,头文件dos.h定义了一个find_t结构,它可以描述DOS下的文件信息,包括文件名、时间、日期、大小和属性。其次,C编译程序库中有_dos_findfirst()和_dos_findnext()这样两个函数,利用它们可以找到某个目录下符合查找要求的第一个或下一个文件。dos_findfirst()函数有三个参数,第一个参数指明要查找的文件名,例如你可以用“*.*”指明要查找某个目录下的所有文件。第二个参数指明要查找的文件属性,例如你可以指明只查找隐含文件或子目录。第三个参数是指向一个find_t变量的指针,查找到的文件的有关信息将存放到该变量中。dos_findnext()函数在相应的目录中继续查找由_dos_findfirst()函数的第一个参数指明的文件。_dos_findnext()函数只有一个参数,它同样是指向一个find_t变量的指针,查找到刚文件的有关信息同样将存放到该变量中。利用上述两个函数和find_t结构,你就可以遍历磁盘上的某个目录,并列出该目录下所有的文件,请看下例:#include <stdio.h>#include <direct.h>#include <dos.h>#include <malloc.h>#include <memory.h>#include <string.h>typedef struct find_t FILE_BLOCKvoid main(void);void main(void){FILE_BLOCK f-block; /* Define the find_t structure variable * /int ret_code; / * Define a variable to store the return codes * // * Use the "*.*" file mask and the 0xFF attribute mask to listall files in the directory, including system files, hiddenfiles, and subdirectory names. * /ret_code = _dos_findfirst(" *. * ", 0xFF, &f_block);/* The _dos_findfirst() function returns a 0 when it is successfuland has found a valid filename in the directory. * /while (ret_code == 0){/* Print the file's name * /printf(" %-12s\n, f_block, name);/ * Use the -dos_findnext() function to look
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
单人床和双人床的区别是什么啊?
如何复制全屏
“斐乐”的读音是什么?
广饶明星舞蹈学校好还是翎艺舞蹈学校好
爱上网吧地址有知道的么?有点事想过去
圣大跑马衣服怎么样?我今天买了一件九百多的
锅炉过户在哪里
刘询和刘贺关系好吗?
CAD怎么复制粘贴图?
宋朝辽邦是什么地方
LOL没到15分钟怎么投降
有些人为什么容易见到鬼 怕鬼
八月看刘诗诗和胡夏的伤心童话!写一句宣传语
2OO3年农历5月26日是什么星座?
阿玛迪罗的演职员表
推荐资讯
现在还有没有人玩QQ堂
We're all storice in the end是什么意思
听说这场海选都哭了,到底怎么回事
风水--石敢当
来思阅读馆地址在什么地方,想过去办事
中华考资,华夏考资,新华考资,请比较一下各
易中天的幽默到哪里去了
国藏汾酒 国家珍藏酒 多少钱 55度 660ml的!
为什么香港的咏春不出来和徐晓东打?
昭陵是什么意思.为何有唐代的也有清朝的
青口有什么好吃的
VBA 定义时间常量为0:30,回车之后就是变为12
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?