c语言获取某个目录下的所有目录或文档|时刻需

阅读次数: 54

  • A+
所属分类:建站

windows上的文件列表 linux上会报错


#include<time.h>
#include<stdio.h>
#include<dos.h>
#include<conio.h>
#include <stdlib.h>
#include <windows.h>
#include <direct.h>
//#pragma  comment(lib,"ws2_32.lib")
#include <io.h>


main(){

    //声明一个二维字符串数组用来存储 文件名字的  现在还不知道 动态长度的字符串怎么声明

    char result[100][50];

    int *i;
    i = 0;
    int i_addr = &i;// main 里边的变量 可在任何方法中调用并可以时刻修改值的地址

    char file_path[50];
    time_t start,end;
    printf("请输入文件的绝对路径:\n");

    scanf("%s",file_path );

    start = time(NULL);
    file_list(file_path,i_addr,result);
    end = time(NULL);
    printf("runtime is:%f(s)\n",difftime(end,start));/*调用difftime函数,从start到end说经过的时间*/
    printf("result结果的长度是%d\n",sizeof(result));
    int num = *(int *)i_addr;
    printf("num的值是%d\n",num);
    int s;
    for(s=0;s<num;s++){
        printf("result的第%d次结果是%s\n",s,result展开);

    }
    return 0;
}
int file_list(char *file_path,int i_addr,char result[100][50]){
    struct _finddata_t file;//定义结构体 file
    long handle; //定义 资源类型 andle
    int file_num = 1;//定义当前目录的第几个文件或目录
    FILE *pf = NULL;
    char temp_file_path[300];//目录的绝对路径的临时存放地址
    strcpy(temp_file_path, file_path);
    strcat(temp_file_path,"*.*");//这个地方可以 通过正则匹配来声明更多的参数和功能
    printf("当前要打开的文件路径:%s\n",temp_file_path);

    handle = _findfirst(temp_file_path,&file);//查找目录或文档 然后将结果 放入 ile中
    //如果查询成功则 handle = 0;
    if(handle == -1){
        //没有查询到任何信息
        return 0;
    }else{
        if(file.name[0] != '.'){
           printf("当前目录%s的第%d个文件名字是:%s\n",file_path,file_num,file.name);
        //将查出来的 文件名字 存入字符串数组

/*这里是要开始将 外层 i的值变化的 start */
        int num=0;
        num = *(int *)i_addr;
        strcpy(result[num],file.name);
        printf("文件名字是%s\n",result[num]);
        num++;
        *(int *)i_addr = num;
/*这里是要开始将 外层 i的值变化的 end */
        }
    }
    while (!(_findnext(handle, &file))){

            if(file.name[0] != '.'){
                file_num++;
                printf("当前目录%s的第%d个文件名字是:%s\n",file_path,file_num,file.name);
                printf("当前目录%s的第%d个文件类型是:%#x\n",file_path,file_num,file.attrib);


                int num = 0;
                num = *(int *)i_addr;
                strcpy(result[num],file.name);
                num++;
                *(int *)i_addr = num;

                printf("-------------------\n");
                if(file.attrib == _A_SUBDIR){


                    //如果是目录的话
                    //继续调用自己再次 查询
                    //整理查询前要传递的参数
                    char son_file_path[300];
                    strcpy(son_file_path,file_path);
                    strcat(son_file_path,file.name);
                    strcat(son_file_path,"/");
                    printf("当前目录%s的第%d个儿子目录全路径是:%s\n",file_path,file_num,son_file_path);
                    file_list(son_file_path,i_addr,result);

                }
            }

    }
    _findclose(handle);

}

linux上的初步操作 --只能获取一层的并不是所有的

#include <stdio.h>

#include <dirent.h>

void main(int argc, char * argv[])

{

    char ch,infile[50],outfile[50];

    struct dirent *ptr;

     DIR *dir;

    dir=opendir("G:/c");

    while((ptr=readdir(dir))!=NULL)

    {



    //跳过'.'和'..'两个目录

        if(ptr->d_name[0] == '.')

            continue;

        printf("%s is ready...\n",ptr->d_name);

        sprintf(infile,"./one/%s",ptr->d_name);



     printf("<%s>\n",infile);

    }

    closedir(dir);

}

 

时刻需

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: