假设我们有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;
}
答案 0 :(得分:1)
不幸的是,我们可以从operations.cpp
看到Boost Filesystem中唯一的lstat()
调用位于symlink_status()
,它只返回文件类型和权限,而不是时间戳。
所以你现在运气不好,但你可以尝试提交一个补丁,因为Boost Filesystem显然不反对使用lstat()
。