这个简单的代码:
std::time_t tm = boost::filesystem::last_write_time( filename );
boost::filesystem::last_write_time( directory, tm );
如果 directory
则抛出“不允许操作”异常是执行代码的用户以外的用户拥有的路径。
我对此感到有点困惑,因为我正在处理具有 777
的目录或 rwxrwxrwx
权限,我可以使用 touch
轻松更改它们的修改时间在外壳中。
我错过了什么吗? Boost 要求的权限是否超过它需要的权限?有什么办法可以解决这个问题吗?
这是Boost中的相关代码:
handle_wrapper hw(
create_file( ph.c_str(), FILE_WRITE_ATTRIBUTES,
FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE, 0,
OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0 ) );
if ( hw.handle == INVALID_HANDLE_VALUE )
return error_code( ::GetLastError(), system_category );
return error_code( ::SetFileTime( hw.handle, 0, 0, &last_write_time ) != 0
? 0 : ::GetLastError(), system_category );
最佳答案
我敢打赌 touch -r file directory
也会失败。这将使用 file
的时间戳而不是当前时间。
我找不到关于该行为的明确文档,但如果你们都设置了明确的时间并且不拥有您正在触摸的文件。
$ touch foo
$ touch bar
$ sudo chmod a+rw bar
$ sudo chown root.root bar
$ touch bar
# success
$ touch -r foo bar
touch: setting times of `bar': Operation not permitted
仔细想想也有道理。如果您对文件/目录具有写权限,则可以手动编辑以将修改时间更改为现在。但是将修改时间设置为其他时间需要所有权。
关于c++ - 成功执行boost::filesystem::last_write_time需要哪些权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10123346/