Win32的时间类型_第1页
Win32的时间类型_第2页
Win32的时间类型_第3页
Win32的时间类型_第4页
Win32的时间类型_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Win32 的时间类型在 Win32 时间类型有这样几种类型 FILETIME/SYSTEMTIME/WINDOWSTIME 先提个问题, 如 何计算当前时间 100 天以后的时间,在 win32 中。 1.SYSTEMTIME SYSTEMTIME 的定义是这样typedef struct _SYSTEMTIMEWORD wYear;WORD wMonth;WORD wDayOfWeek;WORD wDay;WORD wHour;WORD wMinute;WORD wSecond;WORD wMilliseconds; SYSTEMTIME;很大,总共 16 个字节。 你可以调用 GetSy

2、stemTime 来取得 当前的时间SYSTEMTIME st;:GetSystemTime(&st); 但是如果你调用 st.wDay += 100; 是 达不到效果的,将会得到一个无效的时间格式 2. FILETIME FILETIME 的定义是这样的typedef struct _FILETIMEDWORD dwLowDateTime;DWORD dwHighDateTime; FILETIME;FILETIME 这个名字很奇怪,其实他跟 FILE 并 没有直接关系, 只是很多 File 的 API 中, 都以这个为时间的 类型,比如你可以调用 GetFileTime 来取得 File

3、的创建 /修改 /访问时间。FILETIME 是一个 _int64 。可以这样转化成 _int64 _int64 d = *(_int64 *)&st;/or_int64 d2; memcpy(&d2,&st,sizeof(d2);转化为 _int64 是一个以 100 纳秒为单位的值 补习一下时间单位( spx)1ms ( 毫秒 )1 毫秒=0.001 秒=10-3 秒(millisecond)1卩s (微秒1 微秒 =0.000001=10-6 秒 (microsecond)1ns ( 纳秒 )1 纳秒 =0.000000001 秒 =10-9 秒( nanosecond)1ps ( 皮秒

4、 )1 皮秒 =0.000000000001 秒 =10-12 秒1fs ( 飞秒 )1 飞秒=0.00000000000001秒=10-15 秒SYSTEMTIME 可以通过 SystemTimeToFileTime 来转化为 FILETIME3.Window Time:GetTickCount() 可以返回当前的以微秒为单位的时间, 用在 精度要求不高的场合,返回的只是一个 DWORD ,四字节。 高一点的使用 timeGetTime 如何计算当前时间 100 天以后的 时间,在 win32 中。应该这样写 const _int64nano100SecInDay=(_int64)10000

5、000*60*60*24;SYSTE MTIME 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

6、 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

7、 tmp = file.substr(0,tag); :CreateDirectory(tmp.c_str(),NULL);elsebreak;void xdel(const char *dir)char tempFileFind1024;sprintf(tempFileFind,%s*.*,dir);WIN32_FIND_DATA ffd; HANDLE hFind;hFind = :FindFirstFile(tempFileFind,&ffd);if(hFind = INVALID_HANDLE_VALUE)printf(cant find %sn,dir); return;while(

8、true)/printf(find %sn,ffd.cFileName);FILETIME &ft = ffd.ftLastWriteTime; ULARGE_INTEGER ui;memcpy(&ui,&ft,sizeof(ui);_int64 t = now.QuadPart-ui.QuadPart;if(ffd.dwFileAttributes&FILE_A TTRIBUTE_DIRECTORY)if(strcmp(ffd.cFileName, .) & strcmp(ffd.cFileName,.)char temp1024; sprintf(temp,%s%s,dir,ffd.cFi

9、leName); xdel(temp);if(t=nano100SecInDay*days)if(:RemoveDirectory(temp)printf(del dir %s okn,temp);else printf(del dir %s failedn,temp);elsechar temp1024;sprintf(temp,%s%s,dir,ffd.cFileName);if(t=nano100Sec InDay*days)if(backup)string backup_file = temp;backup_file.replace(0,dst_dir.length(),backup_

10、dir.c_str(); make_sure_dir_exist(backup_file);if(:MoveFile(temp,backup_file.c_str()printf(backup file %s okn,temp);else printf(backup file %s failedn,temp); elseSetFileAttributes(temp,FILE_ATTRIBUTE_NORMAL);if(:DeleteFile(temp)printf(del file %s okn,temp);elseprintf(del file %s failedn,temp);if (!Fi

11、ndNextFile(hFind, &ffd)break;FindClose(hFind);int main(int argc,char * argv)if(argc2)printf(usage: xdel directory /d= /m=n);printf(optional /d: config the expired days,default is 14 daysn);printf(optional /m: config the backup directoryn); printf(for example: xdel d:test /d=10 /m=d:backup); return 1;for(int i=1;iargc;+i)string tmp = argvi;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;back

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论