我正在尝试构建一个函数,用于查找具有特定扩展名的最后添加的文件。 这是我做的:
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"]);
有没有更好的方法来实现这个目标?
答案 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"