创建一个读取当前目录,打印文件路径和内容的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);
答案 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;
}