bool FileTimeToTime_t(const char * szFileName, time_t *t)
{
bool ret = false;
#ifdef _WIN32
FILETIME ftCreate;
HANDLE hFile = CreateFile(szFileName, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);
if (INVALID_HANDLE_VALUE != hFile){
ret = GetFileTime(hFile, &ftCreate, NULL, NULL);
if (ret){
ULARGE_INTEGER ui;
ui.LowPart = ftCreate.dwLowDateTime;
ui.HighPart = ftCreate.dwHighDateTime;
*t = ((LONGLONG)(ui.QuadPart - 116444736000000000) / 10000);
}
CloseHandle(hFile);
}
#else
//struct stat buf;
//int nret = stat(szFileName, &buf);
//if (nret == 0){
// time_t tTmp = buf.st_mtime;
// FILE * fp = NULL;
// char cmd[512] = { 0 };
// sprintf(cmd, "ls --full-time %s | awk 'NR==1{print $7;}' | awk -F \".\" '{print $2}' | cut -c1-3 ");
// if ((fp = popen(cmd, "r")) != NULL){
// fgets(cmd, sizeof(cmd), fp);
// pclose(fp);
// int usec = atoi(cmd);
// *t = tTmp * 1000 + usec;
// ret = true;
// }
//}
struct stat ss;
if (stat(szFileName, &ss) == 0)
{
#if (defined __USE_MISC || defined __USE_XOPEN2K8)
*t = ss.st_mtim.tv_sec * 1000LL + ss.st_mtim.tv_nsec / 1000000;
#else
*t = ss.st_mtime * 1000LL;
#endif
ret = true;
}
#endif
return ret;
}
获取文件创建时间 毫秒级 c++
于 2019-07-23 09:13:14 首次发布