使用 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);
当我使用
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);