//
// File.c
//
// 对/Users/lance目录进行扫描生成树形目录
//
// Created by Lance on 13-5-22.
//
//
#include <unistd.h>
#include <stdio.h>
#include <dirent.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <stdlib.h>
void printdir(char *dir, int depth)
{
DIR *dp;
struct dirent *entry;
struct stat statbuf;
if ((dp = opendir(dir)) == NULL) {
fprintf(stderr, "cannot open directory: %s\n", dir);
return ;
}
chdir(dir); //system call
while ( (entry = readdir(dp)) != NULL ) {
lstat( entry->d_name, &statbuf );
if ( S_ISDIR(statbuf.st_mode) ) {
if ( strcmp(".", entry->d_name) == 0 ||
strcmp("..", entry->d_name) == 0 ) {
continue;
}// end of if
printf("%*s%s/\n", depth,"",entry->d_name);
printdir(entry->d_name, depth + 4);
}
else
printf("%*s%s\n", depth, "", entry->d_name);
}
chdir("..");
closedir(dp);
}
int main()
{
printf("Directory scan of /Users/lance:\n");
printdir("/Users/lance", 0);
printf("done.\n");
exit(0);
}
声明:摘自《linux程序设计》
本文介绍了一个简单的C语言程序,用于递归地扫描指定目录(如/Users/lance),并以树状结构打印出所有子目录和文件。该程序使用了标准C库中的函数,包括目录操作、文件状态统计等。
1619

被折叠的 条评论
为什么被折叠?



