FILETIME/SYSTEMTIME/WINDOWSTIME
鍏堟彁涓棶棰橈紝濡備綍璁$畻褰撳墠鏃墮棿100澶╀互鍚庣殑鏃墮棿錛屽湪win32涓?/font>
1.SYSTEMTIME
SYSTEMTIME鐨勫畾涔夋槸榪欐牱
typedef聽struct聽聽_SYSTEMTIME
聽聽聽聽{
聽聽聽聽WORD聽wYear;
聽聽聽聽WORD聽wMonth;
聽聽聽聽WORD聽wDayOfWeek;
聽聽聽聽WORD聽wDay;
聽聽聽聽WORD聽wHour;
聽聽聽聽WORD聽wMinute;
聽聽聽聽WORD聽wSecond;
聽聽聽聽WORD聽wMilliseconds;
聽聽聽聽}聽SYSTEMTIME;
寰堝ぇ錛屾誨叡16涓瓧鑺傘備綘鍙互璋冪敤GetSystemTime鏉ュ彇寰楀綋鍓嶇殑鏃墮棿
SYSTEMTIME聽st;
::GetSystemTime(&st);
浣嗘槸濡傛灉浣犺皟鐢?st.wDay += 100;鏄揪涓嶅埌鏁堟灉鐨勶紝灝嗕細寰楀埌涓涓棤鏁堢殑鏃墮棿鏍煎紡
2. FILETIME
FILETIME鐨勫畾涔夋槸榪欐牱鐨?br />typedef聽struct聽聽_FILETIME
聽聽聽聽{
聽聽聽聽DWORD聽dwLowDateTime;
聽聽聽聽DWORD聽dwHighDateTime;
聽聽聽聽}聽FILETIME;
FILETIME榪欎釜鍚嶅瓧寰堝鎬紝鍏跺疄浠栬窡FILE騫舵病鏈夌洿鎺ュ叧緋伙紝鍙槸寰堝File鐨凙PI涓紝閮戒互榪欎釜涓烘椂闂寸殑綾誨瀷錛屾瘮濡備綘鍙互璋冪敤GetFileTime鏉ュ彇寰桭ile鐨勫垱寤?淇敼/璁塊棶鏃墮棿銆?br />FILETIME鏄竴涓猒_int64銆傚彲浠ヨ繖鏍瘋漿鍖栨垚__int64
__int64聽d聽=聽*(__int64聽*)&st;
//or
__int64聽d2;
memcpy(&d2,&st,sizeof(d2));
杞寲涓篲_int64鏄竴涓互100綰崇涓哄崟浣嶇殑鍊?br />琛ヤ範涓涓嬫椂闂村崟浣?http://blog.vckbase.com/zaboli/archive/2005/06/29/8969.aspx)
1ms (姣) | 1姣=0.001縐?10-3縐?millisecond) |
1渭s (寰) | 1寰=0.000001=10-6縐?microsecond) |
1ns (綰崇) | 1綰崇=0.000000001縐?10-9縐掞紙nanosecond) |
1ps (鐨) | 1鐨=0.000000000001縐?10-12縐?/font> |
1fs (椋炵) | 1椋炵=0.00000000000001縐?10-15縐?/font> |
SYSTEMTIME鍙互閫氳繃SystemTimeToFileTime鏉ヨ漿鍖栦負FILETIME
3.Window Time
::GetTickCount()鍙互榪斿洖褰撳墠鐨勪互寰涓哄崟浣嶇殑鏃墮棿錛岀敤鍦ㄧ簿搴﹁姹備笉楂樼殑鍦哄悎錛岃繑鍥炵殑鍙槸涓涓狣WORD錛屽洓瀛楄妭銆傞珮涓鐐圭殑浣跨敤timeGetTime
濡備綍璁$畻褰撳墠鏃墮棿100澶╀互鍚庣殑鏃墮棿錛屽湪win32涓?br />搴旇榪欐牱鍐?br />
const聽__int64聽nano100SecInDay=(__int64)10000000*60*60*24;
SYSTEMTIME聽st;
::GetSystemTime(&st);
FILETIME聽f;
::SystemTimeToFileTime(&st,&f);
ULARGE_INTEGER聽now;
memcpy(&now,&f,sizeof(now));
now聽+=聽100*nano100SecInDay;
memcpy(&f,&now,sizeof(f));
FileTimeToSystemTime(&f,&st);
鏈鍚庯細闄勪笂鎴戝啓鐨勪竴涓皬宸ュ叿錛屽垹闄ゆ寚瀹氭枃浠跺す涓嬮潰鐨勮繃鏈熸枃浠剁殑涓涓伐鍏鳳紝騫跺彲浠ュ浠斤紝鏀寔瀛愭枃浠跺す宓屽銆?br />
#include聽<windows.h>
#include聽<cstdio>
#include聽<string>
using聽namespace聽std;
const聽__int64聽nano100SecInDay=(__int64)10000000*60*60*24;
ULARGE_INTEGER聽now;
int聽days聽=聽14;
bool聽backup聽=聽false;
string聽dst_dir;
string聽backup_dir;
void聽make_sure_dir_exist(string聽&聽file)
{
聽聽聽聽int聽tag聽=聽2;
聽聽聽聽while(true)
聽聽聽聽{
聽聽聽聽聽聽聽聽tag聽=聽file.find_first_of("\\",tag+1);
聽聽聽聽聽聽聽聽if(tag!=-1)
聽聽聽聽聽聽聽聽{
聽聽聽聽聽聽聽聽聽聽聽聽string聽tmp聽=聽file.substr(0,tag);
聽聽聽聽聽聽聽聽聽聽聽聽::CreateDirectory(tmp.c_str(),NULL);
聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽else
聽聽聽聽聽聽聽聽{
聽聽聽聽聽聽聽聽聽聽聽聽break;
聽聽聽聽聽聽聽聽}
聽聽聽聽}
}
void聽xdel(const聽char聽*dir)
{
聽聽聽聽char聽tempFileFind[1024];
聽聽聽聽sprintf(tempFileFind,"%s\\*.*",dir);
聽聽聽聽
聽聽聽聽WIN32_FIND_DATA聽ffd;
聽聽聽聽HANDLE聽hFind;
聽聽聽聽hFind聽=聽::FindFirstFile(tempFileFind,&ffd);
聽聽聽聽
聽聽聽聽if(hFind聽==聽INVALID_HANDLE_VALUE)
聽聽聽聽{
聽聽聽聽聽聽聽聽printf("can't聽find聽%s\n",dir);
聽聽聽聽聽聽聽聽return;
聽聽聽聽}
聽聽聽聽
聽聽聽聽while(true)
聽聽聽聽{
聽聽聽聽聽聽聽聽//printf("find聽%s\n",ffd.cFileName);
聽聽聽聽聽聽聽聽FILETIME聽&ft聽=聽ffd.ftLastWriteTime;
聽聽聽聽聽聽聽聽ULARGE_INTEGER聽ui;
聽聽聽聽聽聽聽聽memcpy(&ui,&ft,sizeof(ui));
聽聽聽聽聽聽聽聽__int64聽t聽=聽now.QuadPart-ui.QuadPart;
聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽if(ffd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
聽聽聽聽聽聽聽聽{
聽聽聽聽聽聽聽聽聽聽聽聽if(strcmp(ffd.cFileName,聽".")聽&&聽strcmp(ffd.cFileName,聽".."))
聽聽聽聽聽聽聽聽聽聽聽聽{
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽char聽temp[1024];
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽sprintf(temp,"%s\\%s",dir,ffd.cFileName);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽xdel(temp);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽if(t>=nano100SecInDay*days)
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽{
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽if(::RemoveDirectory(temp))
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽{
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽printf("del聽dir聽%s聽ok\n",temp);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽else
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽{
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽printf("del聽dir聽%s聽failed\n",temp);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽else
聽聽聽聽聽聽聽聽{
聽聽聽聽聽聽聽聽聽聽聽聽char聽temp[1024];
聽聽聽聽聽聽聽聽聽聽聽聽sprintf(temp,"%s\\%s",dir,ffd.cFileName);
聽聽聽聽聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽聽if(t>=nano100SecInDay*days)
聽聽聽聽聽聽聽聽聽聽聽聽{
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽if(backup)
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽{
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽string聽backup_file聽=聽temp;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽backup_file.replace(0,dst_dir.length(),backup_dir.c_str());
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽make_sure_dir_exist(backup_file);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽if(::MoveFile(temp,backup_file.c_str()))
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽{
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽printf("backup聽file聽%s聽ok\n",temp);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽else
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽{
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽printf("backup聽file聽%s聽failed\n",temp);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽else
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽{
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽SetFileAttributes(temp,FILE_ATTRIBUTE_NORMAL);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽if(::DeleteFile(temp))
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽{
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽printf("del聽file聽%s聽ok\n",temp);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽else
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽{
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽printf("del聽file聽%s聽failed\n",temp);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽if聽(!FindNextFile(hFind,聽&ffd))聽
聽聽聽聽聽聽聽聽{
聽聽聽聽聽聽聽聽聽聽聽聽break;
聽聽聽聽聽聽聽聽}
聽聽聽聽}
聽聽聽聽FindClose(hFind);
}
int聽main(int聽argc,char聽**聽argv)
{
聽聽聽聽if(argc<2)
聽聽聽聽{
聽聽聽聽聽聽聽聽printf("usage:聽xdel聽directory聽/d=聽/m=\n");
聽聽聽聽聽聽聽聽printf("[optional]聽/d:聽config聽the聽expired聽days,default聽is聽14聽days\n");
聽聽聽聽聽聽聽聽printf("[optional]聽/m:聽config聽the聽backup聽directory\n");聽
聽聽聽聽聽聽聽聽printf("for聽example:聽xdel聽d:\\test聽/d=10聽/m=d:\\backup");
聽聽聽聽聽聽聽聽return聽1;
聽聽聽聽}
聽聽聽聽
聽聽聽聽for(int聽i=1;i<argc;++i)
聽聽聽聽{
聽聽聽聽聽聽聽聽string聽tmp聽=聽argv[i];
聽聽聽聽聽聽聽聽if(tmp.find("/d=")!=-1)
聽聽聽聽聽聽聽聽{
聽聽聽聽聽聽聽聽聽聽聽聽int聽d聽=聽atoi(tmp.substr(3).c_str());
聽聽聽聽聽聽聽聽聽聽聽聽if(d!=0)
聽聽聽聽聽聽聽聽聽聽聽聽{
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽days聽=d;
聽聽聽聽聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽else聽if(tmp.find("/m=")!=-1)
聽聽聽聽聽聽聽聽{
聽聽聽聽聽聽聽聽聽聽聽聽backup聽=聽true;
聽聽聽聽聽聽聽聽聽聽聽聽backup_dir聽=聽tmp.substr(3);
聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽else
聽聽聽聽聽聽聽聽{
聽聽聽聽聽聽聽聽聽聽聽聽dst_dir聽=聽tmp;
聽聽聽聽聽聽聽聽}
聽聽聽聽}
聽聽聽聽
聽聽聽聽//Get聽system聽time
聽聽聽聽SYSTEMTIME聽st;
聽聽聽聽::GetSystemTime(&st);
聽聽聽聽FILETIME聽f;
聽聽聽聽::SystemTimeToFileTime(&st,&f);
聽聽聽聽memcpy(&now,&f,sizeof(now));
聽聽聽聽
聽聽聽聽xdel(argv[1]);
聽聽聽聽
聽聽聽聽return聽0;
}

]]>