C++设置文件最近修改时间

C++设置文件最近修改时间

2023年7月3日发(作者:)

C++设置⽂件最近修改时间利⽤VS开发C++项⽬,经常发现修改系统时间后,每次编译过程会变得很慢,其原因就是当你把系统时间调到未来的⼀个时间点,然后有意或者⽆意编辑过⼀些代码⽂件,那么这些⽂件的时间戳就停留在未来.当你把系统时间调到现在后,编译器每次编译的时候,总会判定这些⽂件是最新的(因为它的时间戳总是⼤于⽬标⽂件的时间戳),所以总是会把这些⽂件编译⼀遍,如果这些⽂件中有某些被其他⽂件引⽤,那么会有更多的⽂件被重新编译,⽽且这种过程每次编译都会执⾏⼀遍,导致编译速度降低.为了解决这个问题,我特意写了⼀个⼩⼯具.这个⼯具的原理跟简单,找出指定⽬录下时间戳⼤于当前时间的⽂件,并把它们的时间戳设置为现在时间.调⽤的时候,配合⼀个bat脚本,把需要检查的代码⽬录传进去就好了,例如echo offResetFileTime MsgDefine Serverpause

#include #include #include #include #include #include #include #include bool IsCompileFile(const std::string & extension){ static std::set setComplieFileExtension = {".cpp", ".c", ".cc", ".h", ".hpp"}; return (extension) != ();}std::string GetFileNameExtension(const std::string & fileName){ /* DWORD dwAttrib = GetFileAttributes(fileName.c_str()); if (dwAttrib == INVALID_FILE_ATTRIBUTES) { return ""; } if (dwAttrib & FILE_ATTRIBUTE_DIRECTORY) { return ""; }*/ size_t dotpos = _last_of("."); if(dotpos == std::string::npos) { return fileName; } return (dotpos, () - dotpos);}bool CompareSystemTime(const SYSTEMTIME & lhs, const SYSTEMTIME & rhs){ if( > ) { return true; } else if( == && > ) { return true; } else if( == && == && > ) { return true; } else if( == && == && == && > ) { return true; } else if( == && == && == && == && e > e) { return true; } else if( == && == && == && == && e == e && d > d) { return true; } else if( == && == && == && == && e == e && d == d && seconds > seconds) { return true; } return false;}void DumpSystemTime(const std::string & prefix, const SYSTEMTIME & t){ printf("%s %04d-%02d-%02d %02d:%02d:%02dn", prefix.c_str(), , , , , e, d);}void ResetFileTime(const std::string & dir){ WIN32_FIND_DATA fileInfo; HANDLE hFile = nullptr; char tmpPath[MAX_PATH] = { 0 }; sprintf_s(tmpPath, "%s*.*", dir.c_str()); if((hFile = FindFirstFile(tmpPath, &fileInfo)) == HANDLE(-1)) { return; } do { if(Attributes & _A_SUBDIR) { if(strcmp(ame, ".") == 0 || strcmp(ame, "..") == 0) { continue; } sprintf_s(tmpPath, "%s%s", dir.c_str(), ame); ResetFileTime(tmpPath); } else { sprintf_s(tmpPath, "%s%s", dir.c_str(), ame); std::string extension = GetFileNameExtension(ame); if(IsCompileFile(extension)) { FILETIME lastWriteLocalFileTime; FileTimeToLocalFileTime(&WriteTime, &lastWriteLocalFileTime); SYSTEMTIME lastWriteLocalSysTime, nowTime; FileTimeToSystemTime(&lastWriteLocalFileTime, &lastWriteLocalSysTime); GetLocalTime(&nowTime); if(CompareSystemTime(lastWriteLocalSysTime, nowTime)) { HANDLE file = ::CreateFile(tmpPath, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, NULL, NULL); DumpSystemTime(ame, lastWriteLocalSysTime); FILETIME nowWriteLocalFileTime; SystemTimeToFileTime(&nowTime, &nowWriteLocalFileTime); FILETIME nowWriteSysFileTime; LocalFileTimeToFileTime(&nowWriteLocalFileTime, &nowWriteSysFileTime); BOOL ret = SetFileTime(file, &nowWriteSysFileTime, &nowWriteSysFileTime, &nowWriteSysFileTime); if(ret == TRUE) { printf("reset time succ.n"); } else { printf("reset time =%dn", GetLastError()); } } } } } while(FindNextFile(hFile, &fileInfo) == TRUE); FindClose(hFile);}int32_t main(int32_t argc, char *argv[]){ for(int32_t i = 1; i < argc; ++i) { std::string dir = argv[i]; ResetFileTime(dir); } return 0;}

发布者:admin,转转请注明出处:http://www.yc00.com/news/1688384935a130070.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信