如何在Linux中使用C语言读取目录的内容(子目录和文件名)。
答案 0 :(得分:6)
这是一个递归程序,用于递归打印所有子目录和文件的名称
用法:./ a .out路径名称
不检查作为命令行参数提供的初始路径名的错误条件
基本代码流程:
读取当前目录中的所有条目
如果是目录名,则将其名称添加到路径名中,并以递归方式调用函数
否则打印文件的名称。
有关特定功能的详细信息可以在dmuir指出的各个手册页中引用:
#include<sys/stat.h>
#include<unistd.h>
#include<dirent.h>
#include<error.h>
int read(char *pth)
{
char path[1000];
strcpy(path,pth);
DIR *dp;
struct dirent *files;
/*structure for storing inode numbers and files in dir
struct dirent
{
ino_t d_ino;
char d_name[NAME_MAX+1]
}
*/
if((dp=opendir(path))==NULL)
perror("dir\n");
char newp[1000];
struct stat buf;
while((files=readdir(dp))!=NULL)
{
if(!strcmp(files->d_name,".") || !strcmp(files->d_name,".."))
continue;
strcpy(newp,path);
strcat(newp,"/");
strcat(newp,files->d_name);
printf("%s\n",newp);
//stat function return a structure of information about the file
if(stat(newp,&buf)==-1)
perror("stat");
if(S_ISDIR(buf.st_mode))// if directory, then add a "/" to current path
{
strcat(path,"/");
strcat(path,files->d_name);
read(path);
strcpy(path,pth);
}
}
}
int main(int argc,char *argv[])
{
read(argv[1]);
}
答案 1 :(得分:4)
相关功能是opendir,readdir和closedir。我推荐“man opendir”等
答案 2 :(得分:2)
以下代码将执行此操作(取自link),希望它能帮助您开始寻找所需内容。
#include <ftw.h>
#include <stdio.h>
#include <sys/stat.h>
int list(const char *name, const struct stat *status, int type);
int main(int argc, char *argv[]) {
if(argc == 1)
ftw(".", list, 1);
else
ftw(argv[1], list, 1);
return 0;
}
// FTW_F The object is a file
// FTW_D ,, ,, ,, ,, directory
// FTW_DNR ,, ,, ,, ,, directory that could not be read
// FTW_SL ,, ,, ,, ,, symbolic link
// FTW_NS The object is NOT a symbolic link and is one for
// which stat() could not be executed
int list(const char *name, const struct stat *status, int type) {
if(type == FTW_NS)
return 0;
if(type == FTW_F)
printf("0%3o\t%s\n", status->st_mode&0777, name);
if(type == FTW_D && strcmp(".", name) != 0)
printf("0%3o\t%s/\n", status->st_mode&0777, name);
return 0;
}
编辑:ftw是用于遍历文件系统的内容,有关它的更多信息,请参阅其手册页ftw man page