获取文件创建时间 毫秒级 c++

本文介绍了一个跨平台的C/C++函数boolFileTimeToTime_t,用于获取指定文件的最后修改时间,并将其转换为time_t类型的时间戳。该函数在Windows和类Unix系统上均有实现,通过使用操作系统提供的API,如CreateFile、GetFileTime、stat等,来获取文件的创建或修改时间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



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;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值