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;


//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);   
  }
   
  


方法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
++;   
   }
   
 }
   

posted on 2007-04-27 21:04  cy163  阅读(6355)  评论(0编辑  收藏  举报

导航