我也在尝试在使用FILE_FLAG_BACKUP_SEMANTICS之后更改目录的时间戳。我的代码片段如下
int SetDirectoryTime(char *Path)
{
FILETIME ftCreate, ftAccess, ftWrite;
Handle = CreateFile(Path, GENERIC_WRITE, FILE_SHARE_WRITE,
NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);
if (Handle == INVALID_HANDLE_VALUE)
{
//Unable to open directory
return FALSE;
}
if (SetFileTime(Handle, &ftCreate, &ftAccess, &ftWrite) == 0)
{
//Unable to set directory time
CloseHandle(Handle);
return FALSE;
}
}我能够获得有效的句柄,但SetFileTime返回访问被拒绝。我在SE_BACKUP_NAME和SE_RESTORE_NAME上尝试了EnablePrivilege,但仍然被拒绝访问。
发布于 2013-08-13 14:26:46
由于SetFileTime 上的MSDN页面显式地记录了要在上设置时间的文件的句柄,因此必须具有FILE_WRITE_ATTRIBUTES权限。
很明显,你的手柄不会。
所以..。这就对了。
发布于 2018-10-26 08:59:03
const
cWRITE_FILE_ATTIRIBUTES = $100; // not defined in Delphi7
var
cfAttributes : dword;
cfDesiredAccess : dword;
cfShareMode : dword;
hndFile : THandle;
ftAccessed : TFileTime;
ftCreated : TFileTime;
ftModified : TFileTime;
begin
cfAttributes := cWRITE_FILE_ATTIRIBUTES OR FILE_FLAG_BACKUP_SEMANTICS;
cfDesiredAccess := GENERIC_READ OR GENERIC_WRITE;
cfShareMode := FILE_SHARE_READ OR FILE_SHARE_WRITE;
hndFile := CreateFile(pchar(_FQFN),
cfDesiredAccess,
cfShareMode,
nil,
OPEN_EXISTING,
cfAttributes,
0);
SetFileTime(hndFile, @ftCreated, @ftAccessed, @ftModified);
end;此代码在Delph7下正常工作,可以更改目录的时间戳。_FQFN是尾随反斜杠的路径。
为了清晰起见,错误检查被删除并格式化。
https://stackoverflow.com/questions/18201368
复制相似问题