分享

获取目录中的文件列表

 昵称7394876 2012-03-30

获取目录中的文件列表

 

摘要:C/C++获取指定目录的所有的文件一直不存在一个可移植的方案,直至boost::filesystem出现,并被标准库接受为止。本文介绍了多个平台中C/C++获取目录结点的方法,并指出filesystem库的方式是C++标准方法。

问题

在写程序经常需要知道当前或相应目录存在哪些文件,或者指定文件存在与否。那么在C/C++如何完成呢?

答案

现在实中大家最常见的存在两种平台,一个平台是Windows平台,一个平台是Linux或者说POSIX平台,在这两个平台中完成相同的事有着不同的方法,但是都非常简单的。一组简单的函数就可以完成这些操作,对于应用程序而言我们往往只需要这些。

在POSIX中,我们使用opendir、readdir、closedir来完成这个简单的任务;在Windows中,我使用findfirst、findnext、findclose来完成。由于我使用Linux系统,并且平时没有在Windows下写过程序,所以下面我们只是针对POSIX平台说明,其实没有什么说明,给出一个简单的例子就可以了:

#include<iostream>

#include<sys/types.h>
#include<dirent.h>

//打开当前目录,然后读取当前目录中所有的结点
//并打印这个结点的名字
int main()
{
        //打开当前的目录
        DIR* dir=opendir(".");

        //目录里的一个结点
        struct dirent* entry;
        while((entry=readdir(dir)))
        {
                //打印第一个结点的名字
                std::cout << entry->d_name << std::endl;
        }

        //关闭相应的目录
        closedir(dir);

        return 0;
}

上面的程序可以在Linux正常运行。

我也注意了一下Windows的处理方式,它的函数接口没有Linux简捷,但却功能要丰富一点,它提供了一个搜索的功能。

下面我说说如果移植解决我们这里的问题,要做到移植性需要一个中间层,这个中间层可以是我们手工去实现,也可以使用别人的实现。当然如果别人已经实现好了,那么就拿用吧,boost::filesystem已经做到这一点了。本站存在这个库的手册,所以在这里就不多说了,可以过去参看:boost::filesystem指南


http://cpp./book/c_%E9%97%AE%E9%A2%98%E9%9B%86/%E8%8E%B7%E5%8F%96%E7%9B%AE%E5%BD%95%E4%B8%AD%E7%9A%84%E6%96%87%E4%BB%B6%E5%88%97%E8%A1%A8

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多