使用 boost::filesystem::last_write_time 获取锁定文件夹的修改时间

Get modification time of locked folder with boost::filesystem::last_write_time

当我使用

time_t t = last_write_time("C:\System Volume Information");

我得到以下异常:

boost::filesystem::last_write_time: Access denied: "C:\System Volume Information"

不过,Windows Explorer 能够访问该信息。看起来 Boost 需要对该文件夹的额外访问权限,这就是代码不起作用的原因。

是否可以通过某种方式解决问题?

编辑。 这是来自 libs\filesystem\src\operations.cpp:1312 的引用:

handle_wrapper hw(
  create_file_handle(p.c_str(), 0,
    FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE, 0,
    OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0));

我还没看出有什么问题。

即使拥有管理员帐户的用户也无法访问该文件夹,它包含还原点。并不是说您不能使用这样的帐户更改 ACL,但这当然不是正确的解决方案。尝试打开目录的句柄过于笨拙,请改用 FindFirstFile()。像这样:

WIN32_FIND_DATA info;
auto hdl = FindFirstFile(L"C:\System Volume Information", &info);
if (hdl == INVALID_HANDLE_VALUE) throw win32_error(GetLastError());
SYSTEMTIME time;
FileTimeToSystemTime(&info.ftLastWriteTime, &time);
// etc..
//...
FindClose(hdl);