谁能用C给写个在linux下,遍历当前目录下的

谁能用C给写个在linux下,遍历当前目录下的,第1张

UNIX环境高级编程,或者LINUX程序设计里头都有这个例子。

从《LINUX程序设计第二版》当中找了个print2.c的代码给你

/* We start with the appropriate headers and then a function, printdir,

which prints out the current directory.

It will recurse for subdirectories, using the depth parameter is used for indentation. */

#include <unistd.h>

#include <stdio.h>

#include <dirent.h>

#include <string.h>

#include <sys/stat.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)

while((entry = readdir(dp)) != NULL) {

lstat(entry->d_name,&statbuf)

if(S_ISDIR(statbuf.st_mode)) {

/* Found a directory, but ignore . and .. */

if(strcmp(".",entry->d_name) == 0 ||

strcmp("..",entry->d_name) == 0)

continue

printf("%*s%s/\n",depth,"",entry->d_name)

/* Recurse at a new indent level */

printdir(entry->d_name,depth+4)

}

else printf("%*s%s\n",depth,"",entry->d_name)

}

chdir("..")

closedir(dp)

}

/* Now we move onto the main function. */

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

{

char *topdir, pwd[2]="."

if (argc != 2)

topdir=pwd

else

topdir=argv[1]

printf("Directory scan of %s\n",topdir)

printdir(topdir,0)

printf("done.\n")

exit(0)

}

1、系统里面没有/usr/keygoe/ini文件夹或没有权限。可以修改main, 遍历命令行传入的文件夹;

2、filename设置为[256][256],如果文件比较多,程序会崩溃的;

3、遍历子文件夹时,只保存了文件名,没有添加上级路径。

enum{DT_UNKNOWN = 0,# define DT_UNKNOWN DT_UNKNOWNDT_FIFO = 1,# define DT_FIFO DT_FIFODT_CHR = 2,# define DT_CHR DT_CHRDT_DIR = 4,# define DT_DIR DT_DIRDT_BLK = 6,# define DT_BLK DT_BLKDT_REG = 8,# define DT_REG DT_REGDT_LNK = 10,# define DT_LNK DT_LNKDT_SOCK = 12,# define DT_SOCK DT_SOCKDT_WHT = 14# define DT_WHT DT_WHT}这是d_type的枚举类型..........每个值表示一个类型..........4是目录,0是未知,1是管道,2是字符设备,8表示文件...............6是块设备..........其他的都如字面表示..........很容易区分.........


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/9010750.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-23
下一篇 2023-04-23

发表评论

登录后才能评论

评论列表(0条)

保存