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

标签 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);

最佳答案

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

#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;
}

关于c - 读取当前目录,根据文件属性打印结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51906202/

相关文章:

c - 想要根据 C 程序中的数据长度动态分配内存

c - 如何判断何时到达 C 数组的末尾? (特别是 argv)

linux - 哪些 ESQL/C 函数可以直接从 C 代码调用?

linux - CL 解释器有语法高亮吗?

python - 如何使使用 call/Popen 调用的子进程继承环境变量

c - 在迭代之前在 c 中请求一个 lua 表大小

c++ - 如何判断包含头文件的位置?

c++ - 装饰库中的函数

php - 从整个项目中删除不必要的导入

linux - 在特定时间后自动远程运行脚本