我在创建读取当前目录、打印文件路径和内容的 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_OK
来access
来检查文件是否可执行。
#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/