永发信息网

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

答案:2  悬赏:60  手机版
解决时间 2021-12-20 19:43
怎样使用C语言列出某个目录下的文件
最佳答案
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
#include
#include
#include
#include
#include
typedef struct find_t FILE_BLOCK
void 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 list
all files in the directory, including system files, hidden
files, and subdirectory names. * /
ret_code = _dos_findfirst(" *. * ", 0xFF, &f_block);
/* The _dos_findfirst() function returns a 0 when it is successful
and 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
全部回答
用c语言列出目录下的文件,在linux下可采用readdir()函数来实现,代码实现过程为: 1. 打开目录 2. 循环读目录,输出目录下文件 3. 关闭目录指针 参考代码: #include  #include  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下,代码如下: #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]*\n", data.name );         else             printf("   [%s]\n", 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
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
好听的姐妹花名字
因为化妆而让写保证书怎么写
长治市壶关有顺丰网点吗?顺丰快递能到壶关吗?
用粉刺针去黑头这针怎么用啊?
下列方程中,解为x=4的是A.3x+2=4x+5B.x+3=2x
面粉怎么做饺子皮
刚买的联想奥运版80G的硬盘
兴城市老年体育协会办公位置在哪啊?好找么?
篮球比赛规则的意义
小明站在距离平面镜0.5m前照镜子,他镜中的像
与夏末凉城相匹配的情侣网名
exomlay在哪个节目跳破裤子?
—Would you mind if I borrowed your car ju
小公司不做了,不去注销有没有影响公司不注销
解方程:72-50%x=48
推荐资讯
收款收据要怎么写
学步带和学步车哪个好
郑州市新奇中学怎么样
码头上的人,全是硬碰硬。手艺人靠的是手,手
蕉城区烟草专卖局霍童稽查中队地址在什么地方
哪个护肤品清爽营养成分不高
关于学生证区间中转可以不?
电信版苹果5S是不是4G手机?
年轻人是带全金属的手表好还是皮质的好呀
小额无票支出怎么做账
单选题下面对《记念刘和珍君》一文的解说和判
dnf阿修罗如果左边带假猪传说套6件,右边带遗
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?