读取目录中的每个文件 (unix/posix)

reading every file in directories (unix/posix)

我坚持 unix 系统编程,并且是初学者。假设有一个目录是X。有一个文件(text1.txt)和另一个目录是X中的Y。最后,有两个文件(text2.noExtension)和text3.noExtension)另一个目录是 Y 中的 Z。我的目标是读取文件并输入目录,直到没有目录为止。坦率地说,我真的不知道如何继续下去。

#include <dirent.h>
#include <errno.h>
#include <stdio.h>
int main(int argc, char *argv[]) {
    struct dirent *direntp;
    DIR *dirp;
    if (argc != 2) {
        fprintf(stderr, "Usage: %s directory_name\n", argv[0]);
        return 1; }
    if ((dirp = opendir(argv[1])) == NULL) 
    {
        perror ("Failed to open directory");
        return 1;
    }
    while ((direntp = readdir(dirp)) != NULL)
        printf("%s\n", direntp->d_name);
    while ((closedir(dirp) == -1) && (errno == EINTR)) ;
    return 0; 
}

如果要列出所有目录和子目录,请尝试递归。例如:

#include <dirent.h>
#include <errno.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void listOfDir(char * dirname, int level)
{
    struct dirent *direntp;
    DIR *dirp;
    char *subdirname;
    if ((dirp = opendir(dirname)) == NULL) 
    {
        return;
    }
    while ((direntp = readdir(dirp)) != NULL)
    {
        if(strcmp(direntp->d_name, ".")==0 || strcmp(direntp->d_name, "..")==0)
              continue; // skip current and parent directories
        printf("%*c%s\n", level, '>', direntp->d_name);
        if( direntp->d_type == 4)
        {
              // build child dir name and call listOfDir
              subdirname = (char*)malloc(strlen(direntp->d_name) + strlen(dirname) + 2);
              strcpy(subdirname, dirname);
              strcat(subdirname, "/");
              strcat(subdirname, direntp->d_name);
              listOfDir(subdirname, level+1);
              free(subdirname);
        }
    }
    closedir(dirp);
}

int main(int argc, char *argv[]) {
    struct dirent *direntp;
    DIR *dirp;
    if (argc != 2) {
        fprintf(stderr, "Usage: %s directory_name\n", argv[0]);
        return 1; 
    }
    listOfDir(argv[1], 1);
    return 0; 
}

printf("%*c", level, '>')这样的表达式只是为了嵌套的elach级别缩进