您的位置:首页 > 运维架构 > Linux

Linux下遍历目录下的文件 2

2008-02-26 15:34 337 查看

Linux下遍历目录下的文件

方法1:

http://tag.csdn.net/Article/ef431d9b-68b3-419f-9f85-1fb9279f904a.html


//ListFile.cpp


#include <stdio.h>


#include <dirent.h>


#include <sys/types.h>




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




if (2 != argc){


printf("Usage:ListFileSourceFolder ");


return 1;


}


DIR* pDir = NULL;


struct dirent* ent = NULL;


pDir = opendir(argv[1]);




if (NULL == pDir){


printf("Source folder not exists!"); return 1;


}






while (NULL != (ent=readdir(pDir))) {


printf("%s ", ent->d_name);


}


closedir(pDir);


pDir = NULL;

方法3


#include <stdio.h>


#include <dirent.h>


#include <sys/types.h>


#include <sys/stat.h>




void dir_scan(char *path, char *file);


int count = 0;




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






{


struct stat s;




if(argc != 2)

{


printf("one direction requried/n");


exit(1);


}




if(lstat(argv[1], &s) < 0)

{


printf("lstat error/n");


exit(2);


}




if(!S_ISDIR(s.st_mode))

{


printf("%s not direction name/n",argv[1]);


exit(3);


}


dir_scan("", argv[1]);




printf("total: %d files/n", count);


exit(0);


}




void dir_scan(char *path,cha日 *file)






{


struct stat s;


DIR *dir;


struct dirent *dt;


char dirname[50];




memset(dirname,0,50*sizeof(char));


strcpy(dirname,path);






if(lstat(file, &s)<0)

{


printf("lstat error/n");


}






if(S_ISDIR(s.st_mode))

{


strcpy(dirname+strlen(dirname), file);


strcpy(dirname+strlen(dirname), "/");




if((dir = opendir(file)) == NULL)

{


printf("opendir %s/%s error/n");


exit(4);


}




if(chdir(file) < 0)

{


printf("chdir error/n");


exit(5);


}




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

{




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

{


continue;


}




dir_scan(dirname,dt->d_name);


}




if(chdir("..") < 0)

{


printf("chdir error/n");


exit(6);


}




}else

{


printf("%s%s/n", dirname, file);


count++;


}


}






//ListFile.cpp


#include <stdio.h>


#include <dirent.h>


#include <sys/types.h>




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




if (2 != argc){


printf("Usage:ListFileSourceFolder ");


return 1;


}


DIR* pDir = NULL;


struct dirent* ent = NULL;


pDir = opendir(argv[1]);




if (NULL == pDir){


printf("Source folder not exists!"); return 1;


}






while (NULL != (ent=readdir(pDir))) {


printf("%s ", ent->d_name);


}


closedir(pDir);


pDir = NULL;法2:

http://topic.csdn.net/t/20051221/16/4472968.html


试试下面的代码,我是在redhat上编译运行的。




//g++ -o read_dir read_dir.cpp


//用于列出参数目录下的文件




#include <stdio.h>


#include <stdlib.h>




#include <sys/types.h>


#include <dirent.h>




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






{


DIR *dp;


struct dirent *dirp;




if(argc != 2)






{


printf("not enough arguments! exit!/n");


exit(0);


}




if((dp =opendir(argv[1]))== NULL)






{


printf("can't open %s!/n",argv[1]);


exit(0);


}




while((dirp = readdir(dp))!=NULL)


printf("%s/n",dirp->d_name);




closedir(dp);


}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: