转载:http://sunnysab.blog.163.com/blog/static/18037500920134221295425/
struct _FILETIME { //结构体定义 DWORD dwLowDateTime; DWORD dwHighDateTime; } FILETIME;
//FILETIME 结构表示 1601 年 1 月 1 日以来 100 纳秒为间隔数。结构包含的这两个DWORD值组合在一起
//形成一个 64 位值的 32 位值。
typedef struct _SYSTEMTIME { WORD wYear; WORD wMonth; WORD wDayOfWeek; WORD wDay; WORD wHour; WORD wMinute; WORD wSecond; WORD wMilliseconds; } SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME;
头文件:
#include <windows.h> //只需要这一个
FILETIME Filetime;
SYSTEMTIME Systemtime;
接着,设置日期和时间,我们这里设置成1999年1月1日 01:01:01:
Systemtime.wDay = 1; Systemtime.wYear = 1999; //记住,一定要大于1601,因为FILETIME的时间是从1601年1月1日开始的 //如果不大于1601,SetFileTime()会返回false,GetLastError() //返回78 (无效参数) Systemtime.wMonth = 1; Systemtime.wHour = 1; Systemtime.wMinute =1; Systemtime.wDayOfWeek = 1; Systemtime.wSecond = 1; Systemtime.wMilliseconds = 1; 转换SystemTime为Filetime结构: SystemTimeToFileTime( &Systemtime, &Filetime );
由于SetFileTime()需要文件句柄,所以只好用CreateFile()打开这个文件(微软官方实例)
HANDLE hFile = CreateFile( "C:\\测试.txt", GENERIC_WRITE, //这个必须有 FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL );
if (hFile != INVALID_HANDLE_VALUE) { SetFileTime( hFile, &Filetime, &Filetime, &Filetime ); CloseHandle(hFile); }
注:SetFileTime函数
函数原型:
BOOL SetFileTime( //返回值:TRUE表示成功,FALSE表示失败 HANDLE hFile, // 文件句柄 CONST FILETIME *lpCreationTime, // 文件创建时间 CONST FILETIME *lpLastAccessTime, // 最后访问时间 CONST FILETIME *lpLastWriteTime // 最后修改时间 );
你运行试试看,是不是OK了?不,远远不是。我们来看看程序运行后文件的创建时间:
我国标准北京时间是GMT+8:00,所以你只要把时间设为GMT标准时间就可以了,不过还得再说明一下,如果你调成GMT(格林威治时间)的话,还是会有1小时的误差,也就是说Microsoft Windows的文件时间不是按的GMT(格林威治时间)来计算的。我们只要把时区调成GMT(协调世界时)就可以了。
或者,在程序中这样修改一下:
Systemtime.wDay = 31;
Systemtime.wYear = 1998;
Systemtime.wMonth = 12;
Systemtime.wHour = 17;
Systemtime.wMinute = 1;
Systemtime.wDayOfWeek = 1;
Systemtime.wSecond = 1;
Systemtime.wMilliseconds = 1;
2.文件修改时间
转载:https://www.xuebuyuan.com/541894.html
CString GetModifyTime(CString appname) { WIN32_FIND_DATA ffd ; HANDLE hFind = FindFirstFile(appname,&ffd); SYSTEMTIME stUTC, stLocal; FileTimeToSystemTime(&(ffd.ftLastWriteTime), &stUTC); SystemTimeToTzSpecificLocalTime(NULL, &stUTC, &stLocal); CString strTmp; strTmp.Format("%d-%d-%d,%d:%d", stLocal.wYear,stLocal.wMonth,stLocal.wDay,stLocal.wHour,stLocal.wMinute); }