在linux下如何实现文件夹的遍历?

andy_cai 2005-12-21 04:18:50
需要什么函数呢?
...全文
1315 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
fxismonk 2006-03-30
  • 打赏
  • 举报
回复
谢谢qfeng_zhao(鱼儿鱼儿满天飞)的代码:)
不过里面opendir之后没有closedir,提醒一下后来人:)
khyang 2005-12-21
  • 打赏
  • 举报
回复
呵呵..对头
tb01412 2005-12-21
  • 打赏
  • 举报
回复
呵,用递归不就行了吗?
qfeng_zhao 2005-12-21
  • 打赏
  • 举报
回复
#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 is not a direction name\n", argv[1]);
exit(3);
}

dir_scan("", argv[1]);

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

exit(0);
}

void dir_scan(char *path, char *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++;
}
}
前些天学习时刚写的代码...
sinall 2005-12-21
  • 打赏
  • 举报
回复
呵呵《Unix环境高级编程》第一个例子。
一下仅实现了列表一个路径下的文件夹,没有遍历部分。

#include <sys/types.h>
#include <dirent.h>
#include <stdio.h>
#include <sys/stat.h>
//#define __ourhdr_h
//#include "ourhdr.h"

int main(int argc,char* argv[])
{
DIR *dp;
struct dirent * dirp;
if (argc!=2)
{
// err_quit("a single argument (the directory name) is required");
printf("a single argument is required");
return 0;
}
if ((dp=opendir(argv[1]))==NULL)
{
// err_sys("cant open %s",argv[1]);
printf("cant open %s",argv[1]);
return 0;
}
while((dirp=readdir(dp))!=NULL)
{
struct stat buf;
if (lstat(dirp->d_name, &buf) < 0)
{
printf("lstat error");
}
if (S_ISDIR(buf.st_mode))
{
printf("%s\n",dirp->d_name);
}
}

closedir(dp);
// exit(0);
}
xsq618 2005-12-21
  • 打赏
  • 举报
回复
试试下面的代码,我是在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);
}

23,131

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧