Предположим, у нас есть 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
(задание: очевидно, выдать лучшее исключение):
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;
}