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

时间:2015-02-16 13:20:17

标签: c++ boost acl boost-filesystem

当我使用

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

我得到以下异常:

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

然而,Windows资源管理器能够访问该信息。看起来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));

我还没有看到它的错误。

1 个答案:

答案 0 :(得分:4)

即使对于拥有管理员帐户的用户,该文件夹也不受限制,它包含还原点。并不是说你不能用这样的账户改变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);