获取文件的创建时间,最后访问时间,最后修改时间,有时,程序需要知道文件的最后修改时间,以便获知是否被修改过
使用windows的API FindFirstFile,可以非常方便的做到,获得到的时间类型是 FILETIME
FILETIME 只是文件时间,我们要把它转换成系统时间,注意,系统时间有UTC和本地之分,本地系统时间就是你电脑里显示的时间,二UTC则比你电脑里的时间慢8个小时,因为,我们在东八区,而UTC是0时区的时间
直接调用FileTimeToSystemTime 函数,就可以把FILETIME 转换成UTC时间
如果想转成本地系统时间,则先要使用 FileTimeToLocalFileTime 函数,然后再使用 FileTimeToSystemTime
使用windows的API FindFirstFile,可以非常方便的做到,获得到的时间类型是 FILETIME
FILETIME 只是文件时间,我们要把它转换成系统时间,注意,系统时间有UTC和本地之分,本地系统时间就是你电脑里显示的时间,二UTC则比你电脑里的时间慢8个小时,因为,我们在东八区,而UTC是0时区的时间
直接调用FileTimeToSystemTime 函数,就可以把FILETIME 转换成UTC时间
如果想转成本地系统时间,则先要使用 FileTimeToLocalFileTime 函数,然后再使用 FileTimeToSystemTime
示例代码:
GetFileTimeInfoA(string strName)
{
WIN32_FIND_DATA filestruct;
size_t size = strName.length();
wchar_t *buffer = new wchar_t[size+1];
MultiByteToWideChar( CP_ACP, 0, strName.c_str(), size, buffer, size * sizeof(wchar_t) );
buffer[size] = 0; // 确保以 '\0' 结尾
HANDLE hf = FindFirstFile(buffer,&filestruct);
delete buffer;
SYSTEMTIME sysTime;
FILETIME localft;
FILETIME createTime = filestruct.ftCreationTime;
FILETIME lastAccessTime = filestruct.ftLastAccessTime;
FILETIME lastWriteTime = filestruct.ftLastWriteTime;
// 将文件时间转成本地时间
FileTimeToLocalFileTime(&createTime, &localft);
FileTimeToSystemTime(&localft,&sysTime);
printf("创建时间(本地) (YYYY-MM-DD HH:MM:SS): %d-%d-%d %d:%d:%d\n", sysTime.wYear, sysTime.wMonth,
sysTime.wDay, sysTime.wHour, sysTime.wMinute, sysTime.wSecond);
// 将文件时间转成UTC时间 比本地系统时间慢8个小时
FileTimeToSystemTime(&createTime,&sysTime);
printf("创建时间(UTC) (YYYY-MM-DD HH:MM:SS): %d-%d-%d %d:%d:%d\n", sysTime.wYear, sysTime.wMonth,
sysTime.wDay, sysTime.wHour, sysTime.wMinute, sysTime.wSecond);
FileTimeToLocalFileTime(&lastAccessTime, &localft);
FileTimeToSystemTime(&localft,&sysTime);
printf("最后访问时间 (YYYY-MM-DD HH:MM:SS): %d-%d-%d %d:%d:%d\n", sysTime.wYear, sysTime.wMonth,
sysTime.wDay, sysTime.wHour, sysTime.wMinute, sysTime.wSecond);
FileTimeToLocalFileTime(&lastWriteTime, &localft);
FileTimeToSystemTime(&localft,&sysTime);
printf("最后修改时间 (YYYY-MM-DD HH:MM:SS): %d-%d-%d %d:%d:%d\n", sysTime.wYear, sysTime.wMonth,
sysTime.wDay, sysTime.wHour, sysTime.wMinute, sysTime.wSecond);
}