如何列出C程序中的目录中的文件?

我正在尝试在Linux上编写一个ftp服务器。 在这个问题上,我怎么能通过C程序列出terminal目录中的文件? 也许我可以使用exec函数来运行find命令,但是我想把文件名作为一个string来发送客户端程序。 我怎样才能做到这一点?

感谢您的回答。

Solutions Collecting From Web of "如何列出C程序中的目录中的文件?"

一个可用于POSIX兼容系统的示例:

/* * This program displays the names of all files in the current directory. */ #include <dirent.h> #include <stdio.h> int main(void) { DIR *d; struct dirent *dir; d = opendir("."); if (d) { while ((dir = readdir(d)) != NULL) { printf("%s\n", dir->d_name); } closedir(d); } return(0); } 

注意这样的操作是依赖于C的平台

资料来源: http : //faq.cprogramming.com/cgi-bin/smartfaq.cgi?answer=1046380353&id=1044780608

JB Jansen的答案是一个小小的补充 – 在readdir()循环中,我添加了这个:

  if (dir->d_type == DT_REG) { printf("%s\n", dir->d_name); } 

只要检查它是否真的是文件,而不是(sym)链接,目录或其他。

注意:更多关于libc文档中的 struct dirent的信息 。

这里是一个完整的程序如何递归列出文件夹的内容:

 #include <dirent.h> #include <stdio.h> #include <string.h> #define NORMAL_COLOR "\x1B[0m" #define GREEN "\x1B[32m" #define BLUE "\x1B[34m" /* let us make a recursive function to print the content of a given folder */ void show_dir_content(char * path) { DIR * d = opendir(path); // open the path if(d==NULL) return; // if was not able return struct dirent * dir; // for the directory entries while ((dir = readdir(d)) != NULL) // if we were able to read somehting from the directory { if(dir-> d_type != DT_DIR) // if the type is not directory just print it with blue printf("%s%s\n",BLUE, dir->d_name); else if(dir -> d_type == DT_DIR && strcmp(dir->d_name,".")!=0 && strcmp(dir->d_name,"..")!=0 ) // if it is a directory { printf("%s%s\n",GREEN, dir->d_name); // print its name in green char d_path[255]; // here I am using sprintf which is safer than strcat sprintf(d_path, "%s/%s", path, dir->d_name); show_dir_content(d_path); // recall with the new path } } closedir(d); // finally close the directory } int main(int argc, char **argv) { printf("%s\n", NORMAL_COLOR); show_dir_content(argv[1]); printf("%s\n", NORMAL_COLOR); return(0); }