找到最后添加的文件(提升)

时间:2015-09-22 17:37:06

标签: c++ boost

我正在尝试构建一个函数,用于查找具有特定扩展名的最后添加的文件。 这是我做的:

function mutation(arr) {
  var firstElement = arr[0];
  var secondElement = arr[1];
  return secondElement.split('').every(function(elem) {return  firstElement.indexOf(elem) != -1;} );
}
mutation(["Aliens", "lines"]);

有没有更好的方法来实现这个目标?

1 个答案:

答案 0 :(得分:1)

我没有构建您不会使用/需要的(可能很大的)文件名向量,而是在运行中过滤最大修改时间。

此外,不要忘记处理错误:

#include <boost/filesystem.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
#include <iostream>

namespace fs = boost::filesystem;

fs::path getLastAdded(const fs::path path, std::string const& ext = ".xml") {
    std::vector<fs::path> files;

    namespace pt = boost::posix_time;
    pt::ptime max = {pt::neg_infin};
    fs::path last;

    for (fs::recursive_directory_iterator it(path), endit; it != endit; ++it)
        if (fs::is_regular_file(*it) && it->path().extension() == ext)
        {
            try {
                auto stamp = pt::from_time_t(fs::last_write_time(*it));
                if (stamp >= max) {
                    last = *it;
                    max = stamp;
                }
            } catch(std::exception const& e) {
                std::cerr << "Skipping: " << *it << " (" << e.what() << ")\n";
            }
        }

    return last; // empty if no file matched
}

int main() {
    std::cout << "Last: " << getLastAdded(".") << "\n";
}

关于Coliru的一些调试信息:

<强> Live On Coliru

打印

DEBUG: "./i.xml"
DEBUG: "./z.xml"
DEBUG: "./q.xml"
DEBUG: "./c.xml"
DEBUG: "./v.xml"
DEBUG: "./f.xml"
DEBUG: "./t.xml"
DEBUG: "./d.xml"
DEBUG: "./a.xml"
DEBUG: "./b.xml"
DEBUG: "./e.xml"
DEBUG: "./u.xml"
DEBUG: "./p.xml"
DEBUG: "./g.xml"
DEBUG: "./x.xml"
DEBUG: "./y.xml"
DEBUG: "./j.xml"
DEBUG: "./h.xml"
DEBUG: "./o.xml"
DEBUG: "./m.xml"
DEBUG: "./s.xml"
DEBUG: "./w.xml"
DEBUG: "./l.xml"
DEBUG: "./n.xml"
DEBUG: "./r.xml"
DEBUG: "./k.xml"
Last: "./k.xml"