您的位置:首页 > 编程语言 > C语言/C++

C++ 文件及文件夹操作(二)

2015-03-23 23:20 246 查看
获取文件的创建时间,最后访问时间,最后修改时间,有时,程序需要知道文件的最后修改时间,以便获知是否被修改过

使用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);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: