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

作者&投稿:夷贾 (若有异议请与网页底部的电邮联系)
怎样使用C语言列出某个目录下的文件?~

不过,利用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变量的指针,查找到刚文件的有关信息同样将存放到该变量中。

读取的代码方式如下:
int main()
{
long file;
struct _finddata_t find;
_chdir("d:\\");
if((file=_findfirst("*.*", &find))==-1L)
{
printf("空白!
");
exit(0);
}
printf("%s
", find.name);
while(_findnext(file, &find)==0)
{
printf("%s
", find.name);
}
_findclose(file);
return 0;
}
用C语言读取目录中的文件名的方法:
1、如果是在window环境下,可以用一下方法:
使用stdlib.h头文件声明的system()函数,调用系统命令dir,把c:目录下文件列表写入文件dir.txt中
2、使用dirent.h头文件中声明的opendir(),readdir()函数;

3、如果没有dirent.h,可以使用io.h头文件中声明的_findfirst(),_findnext()函数:

用C语言列出目录下的文件,在linux下可采用readdir()函数来实现,代码实现过程为:

  1. 打开目录

  2. 循环读目录,输出目录下文件

  3. 关闭目录指针

参考代码:

#include <dirent.h>
#include <stdio.h>
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 <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]*
", 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 <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


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_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语言的for循环按顺序列出: ABCDEF ABCDE ABCD ABC AB A...
include <stdio.h>int main(){int i, j;for (i = 6; i>0; --i){for (j = 0; j < i; ++j){printf("%c", 'A' + j);}printf("\\n");}return 0;}运行:

c语言怎么输出变量的值呢?
需要准备的材料分别有:电脑、C语言编译器。1、首先,打开C语言编译器,新建一个初始.cpp文件,例如:test.cpp。2、在test.cpp文件中,输入C语言代码:int q = 10;int* p = &q;printf("%d\\n", *p); 。3、编译器运行test.cpp文件,此时成功输出了指针p所指向的变量q的值。

求C语言编程 从键盘输入数值N,列出在[N,100]范围内满足如下条件的所有...
int main(int N){ if(N>100) {printf("Over 100!");return 0;} for(int i=N;i<=100;i++){ if((i%2==0)&&(i%5!=0))printf("%d ",i);return 1;} } 如果觉得我的回答能对你有所帮助,就请采纳我一下吧~ ^-^ 谢谢 ...

写一段c语言程序,列出50以内的所有互质数对。
include<stdio.h> include<math.h> void main(){ int n,i,k,t=0; int a[50];for(i=2;i<=50;i++){ for(k=2;k<=sqrt(i);k++){ if(i%k==0){ break;} } if(k>sqrt(i)){ t++;a[t]=i;} } for(i=1;i<=t;i++)for(k=1;k<=t&&i!=k;k++){ if(a[i]\/...

用C语言写个程序,将结果输出到一个txt文档上,1-25这25个数字,从其中随...
include <stdio.h>main(){ FILE *fp int i,j,k; fp=fopen("1.txt","w"); for (i=1;i<=25;i++) for (j=1;j<=25;j++) for (k=1;k<=25;k++) if (i!=j && i!=k && j!=k) fprintf(fp,"%d\\t%d\\t%d\\n",i,j,k); fclose(fp);}...

C语言题 编写程序,随机列出10道一位数乘法题,由用户回答,程序统计出用 ...
include<stdio.h>#include<stdlib.h>#include<math.h>#includeint main(){int num1,num2,i,count=0,result;srand((int)time(0));for(i=0;i<10;i++) { printf("请输入这个算式的正确答案:\\n"); num1 = (int)(rand()*10.0\/(RAND_MAX+1.0))+1; num2 = (int)...

C语言编程:此题是利用穷举法来列出各种可能的情况,但我也就读懂题意了...
就是说,这个算式里有5个未知数,每个未知数的取值范围都是0-9,且5个未知数各不相同。所以用5个循环来穷举。为了防止两个未知数值相同,定义一个数组x,x[i]表示当前穷举的情况中前面的未知数有没有值为i的,有则x[i]为0;没有,则x[i]为1。所以每重循环,都要判断一下,当前的未知数...

c语言程序:按递增顺序依次列出所有分母为40,分子小于40的最简分数_百度...
40分之一,40分之三,40分之七,40分之九,40分之十一,40分之十三,40分之十七,40分之十九,40分之二十一,40分之二十三,40分之二十七,40分之二十九,40分之三十一,40分之三十三,40分之三十七,四十分之三十九

关于C语言:在一维数组中查找值为x的元素个数,分别列出它们的位序
if(score[x]==a){ printf("%dth ",x+1); \/\/不要随意改变循环变量的值!!count=count+1;}

用c语言这一个 列出从0到200能被2整除的数,并且每4个数为一行,并且成阶...
include<stdio.h> int main(){ int i,j;for(i=0;i<=200;i++){ if(!(i%2))printf(i&&i%8==0?"%d\\n":"%d ",i);if(i&&i%8==0)for(j=0;j

鹤城区15278708652: 怎样使用C语言列出某个目录下的文件? -
终素巴米: 不过,利用C语言的几个目录函数,你可以自己编写一个dir_list()函数.首先,头文件dos.h定义了一个find_t结构,它可以描述DOS下的文件信息,包括文件名、时间、日期、大小和属性.其次,C编译程序库中有_dos_findfirst()和_dos_...

鹤城区15278708652: 怎样使用C语言列出某个目录下的文件?
终素巴米: 比如d:盘下的所有文件 #include <stdio.h> main() { system("d: & dir /b /s /p"); }

鹤城区15278708652: C语言在指定目录下显示指定文件,求代码解释, 不吝感谢!
终素巴米: 关键是这句:dirp-&gt;d_name + (size - 4) dirp-&gt;d_name是一个字符指针,假如现在有 "abc.mp3", dirp-&gt;d_name则指向'a',dirp-&gt;d_name+1指向'b'...,那么此时size=strlen("abc.mp3")=7, dirp-&gt;d_name+(7-4)=dirp-&gt;d_name+3,dirp-&gt;d_name+3指向'.', 此时dirp-&gt;d_name+3指向字符串".mp3".然后就去跟常量字符串".mp3"比较,如果不相同就执行下一次循环

鹤城区15278708652: 如何用c语言获得一个目录下所有文件的文件名? -
终素巴米: void enum_path(char *cpath){WIN32_FIND_DATA wfd;HANDLE hfd;char cdir[MAX_PATH];char subdir[MAX_PATH];int r;GetCurrentDirectory(MAX_PATH,cdir);SetCurrentDirectory(cpath);hfd = FindFirstFile("*.*",&wfd);if(hfd!=INVALID...

鹤城区15278708652: 用c语言编程打印一个目录下文件子目录和文件,要详细代码.谢谢!! -
终素巴米: #include "stdafx.h"#include int main() { system("dir"); system("pause"); return 0; }

鹤城区15278708652: 怎样用C语言对某个目录下的文件名进行排序 -
终素巴米: 遍历目录下所有文件,获取到文件名保存到数组中.然后,使用简单的冒泡排序就可以了.

鹤城区15278708652: C语言如何读取指定路径下的所有指定格式的文件? -
终素巴米: 用C语言读取目录中的文件名的方法: 1、如果是在window环境下,可以用一下方法: 使用stdlib.h头文件声明的system()函数 _CRTIMP int __cdecl system (const char*); system("dir c:\\ /a:h /b > c:\\dir.txt"); 调用系统命令dir,把c:...

鹤城区15278708652: 我想在VC下用C语言输出指定文件夹下的文件目录,应该怎么做,谁能帮帮我啊……举个具体例子最好 -
终素巴米: #include <stdio.h>#include <windows.h> int main() { char chPath[256]; WIN32_FIND_DATA wfd; HANDLE h; printf("Enter the path:\n"); gets(chPath); h = FindFirstFile(strcat(chPath, "\\*"), &wfd); if (h != INVALID_HANDLE_VALUE) { do{ printf(...

鹤城区15278708652: 用C语言编出遍历出某个目录以及其子目录下所有以TXT为扩展名的文本文件 -
终素巴米: #include "StdAfx.h"#include "FindFile.h"//这里只是测试函数//一般我们遍历文件都是有目的 同这个写类似病毒一些东西 void Test(WIN32_FIND_DATA *fd) { MessageBox(0,fd->cFileName,0,0); } BOOL FindFile(char *pFileName, char * ...

鹤城区15278708652: 用c语言写“输入一个目录,计算该目录下的每个文本文件中含有的单词个数,显示文件名和单词个数的列表” -
终素巴米: 先获取目录下的文件列表;按照顺序对每一个文件做:do{ 按照行读取字符串;do{ 每行内做字符串处理:以空格为分解符,获取单词数;如果行尾有'-'则单词数-1;读取下一字符串;}while(!EOF) 输出文件名、单词数;读取下一文件名;}while(文件名非空)

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网