读取当前目录,根据文件属性打印结果

时间:2018-08-18 07:09:15

标签: c linux shell

创建一个读取当前目录,打印文件路径和内容的C程序时遇到了麻烦。

对于目录中找到的每个文件,应根据目录,文件还是可执行文件来打印内容。

我有主要组件在工作,只是不确定如何使用opendir()/ closeir()命令后对文件输出进行排序

例如最终输出:

/home/documents/folder1
File:       help.txt
File:       me.txt
Executable: plz
File:       thankyou.c  

当前代码:

struct dirent *de;  // Pointer for directory entry

// opendir() returns a pointer of DIR type.
DIR *dir = opendir(".");//opens current direcotry

if (dir == NULL)  // opendir returns NULL if couldn't open directory
{
    printf("ERROR: Could not open current directory" );
    return 1;
}

// for readdir()
while ((de = readdir(dir)) != NULL){

      //if (Executable){}
      //else if (File){}
      //else if (Directory){}
        printf("%s\n", de->d_name);

1 个答案:

答案 0 :(得分:1)

您可以使用d_type中的struct dirent来检查文件的类型,并使用access中的X_OK来检查文件是否可执行。

#include <stdio.h>
#include <dirent.h>
#include <string.h>
#include <unistd.h>

int main()
{
    DIR *dir;
    struct dirent *dp;
    char * file_name;
    dir = opendir(".");
    while ((dp=readdir(dir)) != NULL) {
        if ( !strcmp(dp->d_name, ".") || !strcmp(dp->d_name, "..") )
        {
            // do nothing (straight logic)
        } else {
            file_name = dp->d_name; // use it
            if (access(file_name, X_OK) != -1) {
             printf("executable:");
            }
            else if (dp->d_type == DT_DIR)
            {
               printf("directory:");
            }
            else if(dp->d_type == DT_REG)
            {
               printf("file:");
            }
            printf("     \"%s\"\n",file_name);
        }
    }
    closedir(dir);
    return 0;
}