SetFileTime的坑,时间设不下去,谁踩到过?请问怎么回事?
hc_z 2021-01-15 04:50:16 貌似有些时间(合法的时间)设置不下去。保持原有文件时间。
boolean modifyWriteTime(string path1, string path2) {
FILETIME ftCreate1, ftAccess1, ftWrite1;
FILETIME ftCreate2, ftAccess2, ftWrite2;
FILETIME ftCreate3, ftAccess3, ftWrite3;
HANDLE fh1 = CreateFile((CString)path1.c_str(), GENERIC_READ,
FILE_SHARE_READ, NULL, OPEN_EXISTING, NULL, 0);
if (!GetFileTime(fh1, &ftCreate1, &ftAccess1, &ftWrite1)) {
CloseHandle(fh1);
return FALSE;
}
HANDLE fh2 = CreateFile((CString)path2.c_str(), GENERIC_ALL,
FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); // FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_WRITE_THROUGH
if (!GetFileTime(fh2, &ftCreate2, &ftAccess2, &ftWrite2)) {
CloseHandle(fh1);
return FALSE;
}
//设置时间 参数(文件句柄,创建时间,修改时间)
DWORD r1 = GetLastError();
//ftWrite1.dwHighDateTime = 30786615;
//ftWrite1.dwLowDateTime = 3460456960;
BOOL retModTime = SetFileTime(fh2, &ftCreate1, &ftAccess1, &ftWrite1);
DWORD r2 = GetLastError();
if (!retModTime) {
CloseHandle(fh1);
CloseHandle(fh2);
return FALSE;
}
CloseHandle(fh1);
CloseHandle(fh2);
HANDLE fh3 = CreateFile((CString)path2.c_str(), GENERIC_READ,
FILE_SHARE_READ, NULL, OPEN_EXISTING, NULL, 0); // FILE_FLAG_BACKUP_SEMANTICS
if (fh3 == NULL) {
return false;
}
ftWrite3.dwHighDateTime = 111;
ftWrite3.dwLowDateTime = 222;
if (!GetFileTime(fh3, &ftCreate3, &ftAccess3, &ftWrite3)) {
CloseHandle(fh3);
return FALSE;
}
CloseHandle(fh3);
return true;
}
ftWrite3取得的时间和ftWrite2一致,无法和ftWrite1一致。但是,修改ftWrite2的值(注释掉的两行),是可以设下去的。
没有报错和失败。
怀疑是不是不能把过去的时间设置下去?