boost filesystem - 如何在没有解析的情况下获取符号链接的最后写入时间?

时间:2018-06-09 21:21:37

标签: c++ boost stat boost-filesystem

假设我们有2个文件:

lrwxrwxrwx 1 ... 3 Jun  8 09:42 d3 -> dir
d--------- 3 ... 80 Jun  9 16:14 dir

一个是目录的符号链接,另一个是实际目录。

写作时

namespace fs = boost::filesystem;
std::cout << "last write time for symlink : " << 
    fs::last_write_time("x/d3") << " and the actual dir : " <<
    fs::last_write_time("x/dir") << std::endl;

我回来了:

last write time for symlink : 1528578878 and the actual dir : 1528578878

这意味着last_write_time正在解决我输入的路径。如何使用boost::filesystem获取实际统计信息?

如果没有,那么我认为我不得不诉诸lstat的符号链接,这很好,但有点臭,不得不从现代的c ++转移到低级别的系统调用。

以下是lstat解决方案的示例(todo:显然会抛出更好的例外):

std::time_t last_write_time(const fs::path& p){
    struct stat s;
    if(lstat(p.c_str(), &s) == -1)
        throw "last_write_time failed.";
    return s.st_mtime;
}

1 个答案:

答案 0 :(得分:1)

不幸的是,我们可以从operations.cpp看到Boost Filesystem中唯一的lstat()调用位于symlink_status(),它只返回文件类型和权限,而不是时间戳。

所以你现在运气不好,但你可以尝试提交一个补丁,因为Boost Filesystem显然不反对使用lstat()