Impossible is nothing |
|
|||
愛過知情重醉過知酒濃 花開花謝終是空 緣份不停留像春風來又走 女人如花花似夢 |
公告
日歷
統計
導航常用鏈接留言簿(4)隨筆分類(4)隨筆檔案(8)文章分類(77)文章檔案(91)相冊搜索最新評論
閱讀排行榜評論排行榜 |
在Win32時間類型有這樣幾種類型FILETIME/
SYSTEMTIME/WINDOWSTIME 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;
但是如果你調用 st.wDay += 100;是達不到效果的,將會得到一個無效的時間格式::GetSystemTime(&st); 2. FILETIME FILETIME的定義是這樣的 typedef?struct??_FILETIME
FILETIME這個名字很奇怪,其實他跟FILE并沒有直接關系,只是很多File的API中,都以這個為時間的類型,比如你可以調用GetFileTime來取得File的創建/修改/訪問時間。????{ ????DWORD?dwLowDateTime; ????DWORD?dwHighDateTime; ????}?FILETIME; FILETIME是一個__int64??梢赃@樣轉化成__int64 __int64?d?=?*(__int64?*)&st; //or __int64?d2; memcpy(&d2,&st,sizeof(d2)); 轉化為__int64是一個以100納秒為單位的值
SYSTEMTIME可以通過SystemTimeToFileTime來轉化為FILETIME 3.Window Time ::GetTickCount()可以返回當前的以微秒為單位的時間,用在精度要求不高的場合,返回的只是一個DWORD,四字節。高一點的使用timeGetTime 如何計算當前時間100天以后的時間,在win32中。 應該這樣寫 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); 最后:附上我寫的一個小工具,刪除指定文件夾下面的過期文件的一個工具,并可以備份,支持子文件夾嵌套。 #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; }
|
![]() |
|
Copyright © 笑笑生 | Powered by: 博客園 模板提供:滬江博客 |