C ++:如何获取文件夹列表

时间:2010-11-15 11:23:37

标签: c++ linux

我不熟悉C ++,因为我是C#开发人员。

在我的项目中,我需要删除一周前的所有文件夹。在C ++中,如何根据当前系统日期时间获取一周之前的文件夹列表?

我正在研究在Ubuntu 10.10上运行的Eclipse IDE。

如果您可以提供一些代码示例,那就太棒了。

提前致谢,非常感谢您的帮助!

3 个答案:

答案 0 :(得分:5)

这是一个关于OS API的问题,而不是C ++。 C ++本身不提供文件系统操作的功能。但是,有几个可移植库,例如boost::filesystem

但是,如果您只关注一个操作系统,则更容易使用它的设施 - * nix上的POSIX或Windows上的WinAPI。

两者都是基于C的,要获得C ++解决方案,您需要第三方库。

在Linux上,以下内容可能会帮助您入门:

答案 1 :(得分:5)

有了提升:

#include <boost/foreach.hpp>
#include <boost/filesystem.hpp>

int main(int, char**)
{
    time_t one_week_ago = std::time(NULL) - (7 * 24 * 3600);

    boost::filesystem::directory_iterator dir("/tmp"), end;

    BOOST_FOREACH(const boost::filesystem::path& p, std::make_pair(dir, end))
        if(boost::filesystem::is_directory(p))
            if(boost::filesystem::last_write_time(p) < one_week_ago)
                boost::filesystem::remove_all(p);
}

或不使用boost :: foreach

#include <boost/filesystem.hpp>

int main(int, char**)
{
    time_t one_week_ago = std::time(NULL) - (7 * 24 * 3600);

    boost::filesystem::directory_iterator dir("/tmp"), it, end;

    for(it = dir; it != end; it++)
    {
        const boost::filesystem::path& p = *it;
        if(boost::filesystem::is_directory(p))
            if(boost::filesystem::last_write_time(p) < one_week_ago)
                boost::filesystem::remove_all(p);
    }
}

答案 2 :(得分:0)

我原以为你应该看看函数opendir和readdir - 也看看stat。 基本上,打开顶级目录,并检查其中的所有目录条目。 stat函数将能够为您提供访问和修改时间。