当前位置:  开发笔记 > 编程语言 > 正文

你如何在C中获得目录列表?

如何解决《你如何在C中获得目录列表?》经验,为你挑选了6个好方法。

如何在C中扫描目录中的文件夹和文件?它需要跨平台.



1> Clayton..:

以下POSIX程序将打印当前目录中的文件名:

#define _XOPEN_SOURCE 700
#include 
#include 
#include 

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

图片来源:http://www.gnu.org/software/libtool/manual/libc/Simple-Directory-Lister.html

在Ubuntu 16.04中测试过.



2> Will Dean..:

严格的答案是"你不能",因为文件夹的概念并不是真正的跨平台.

在MS平台上,您可以使用_findfirst,_findnext和_findclose来获得'c'类型的感觉,使用FindFirstFile和FindNextFile来获取基础Win32调用.

这是C-FAQ答案:

http://c-faq.com/osdep/readdir.html



3> congusbongus..:

我已经创建了一个开源(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);



4> Andrew Grant..:

没有标准的C(或C++)方法来枚举目录中的文件.

在Windows下,您可以使用FindFirstFile/FindNextFile函数枚举目录中的所有条目.在Linux/OSX下使用opendir/readdir/closedir函数.


提升也不是C.

5> Isak Savo..:

GLib是C的可移植性/实用程序库,它构成了GTK +图形工具包的基础.它可以用作独立库.

它包含用于管理目录的可移植包装器.有关详细信息,请参阅Glib File Utilities文档.

就个人而言,我甚至不会考虑在没有像GLib这样的东西的情况下编写大量的C代码.可移植性是一回事,但是免费获取数据结构,线程助手,事件,主循环等也很好

杰克斯,我几乎开始听起来像一个销售人员:)(别担心,glib是开源的(LGPL),我不以任何方式与它有任何关联)


+1; 相关函数是`g_dir_read_name()`

6> PW...:

opendir/readdir是POSIX.如果POSIX不足以实现您想要实现的可移植性,请检查Apache Portable Runtime

推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有