当我使用
时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));
我还没有看到它的错误。
答案 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);