Cla*_*ton 73
以下POSIX程序将打印当前目录中的文件名:
#define _XOPEN_SOURCE 700
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
int main (void)
{
DIR *dp;
struct dirent *ep;
dp = opendir ("./");
if (dp != NULL)
{
while (ep = readdir (dp))
puts (ep->d_name);
(void) closedir (dp);
}
else
perror ("Couldn't open the directory");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
图片来源:http://www.gnu.org/software/libtool/manual/libc/Simple-Directory-Lister.html
在Ubuntu 16.04中测试过.
Wil*_*ean 19
严格的答案是"你不能",因为文件夹的概念并不是真正的跨平台.
在MS平台上,您可以使用_findfirst,_findnext和_findclose来获得'c'类型的感觉,使用FindFirstFile和FindNextFile来获取基础Win32调用.
这是C-FAQ答案:
http://c-faq.com/osdep/readdir.html
con*_*gus 16
我已经创建了一个开源(BSD)C头来处理这个问题.它目前支持POSIX和Windows.请检查一下:
https://github.com/cxong/tinydir
tinydir_dir dir;
tinydir_open(&dir, "/path/to/dir");
while (dir.has_next)
{
tinydir_file file;
tinydir_readfile(&dir, &file);
printf("%s", file.name);
if (file.is_dir)
{
printf("/");
}
printf("\n");
tinydir_next(&dir);
}
tinydir_close(&dir);
Run Code Online (Sandbox Code Playgroud)
没有标准的C(或C++)方法来枚举目录中的文件.
在Windows下,您可以使用FindFirstFile/FindNextFile函数枚举目录中的所有条目.在Linux/OSX下使用opendir/readdir/closedir函数.
GLib是C的可移植性/实用程序库,它构成了GTK +图形工具包的基础.它可以用作独立库.
它包含用于管理目录的可移植包装器.有关详细信息,请参阅Glib File Utilities文档.
就个人而言,我甚至不会考虑在没有像GLib这样的东西的情况下编写大量的C代码.可移植性是一回事,但是免费获取数据结构,线程助手,事件,主循环等也很好
杰克斯,我几乎开始听起来像一个销售人员:)(别担心,glib是开源的(LGPL),我不以任何方式与它有任何关联)