Предположим, у нас есть 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 ++ до низкоуровневых системных вызовов 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;
}