首页 > 编程 > C++ > 正文

c++ Windows下超时文件删除

2019-11-06 07:46:26
字体:
来源:转载
供稿:网友

操作步骤

取得某个目录下面所有文件

取得文件的创建日期

取得当前日期跟其创建的日期差

删除文件

获取文件的创建时间

int iresult; struct _stat buf; iresult = _stat("D://test.txt", &buf); PRintf("seconds of file create-time from 1970 :%d/n", buf.st_atime); __time64_t* m_seconds = &buf.st_ctime;//create 文件创建时间 注:buf.st_atime:访问时间 buf.st_mtime:修改时间 struct tm* m_localTime = localtime(m_seconds);//转换成 标准时间格式 printf("file ctime time : %d:%d:%d/n", m_localTime->tm_hour, m_localTime->tm_min, m_localTime->tm_sec);

获取当前时间

__time64_t* mptr_currentSeconds = new __time64_t; time(mptr_currentSeconds); printf("current seconds from 1970 :%d/n", *mptr_currentSeconds); m_localTime = localtime(mptr_currentSeconds); printf("current Local time : %d:%d:%d/n", m_localTime->tm_hour, m_localTime->tm_min, m_localTime->tm_sec);

获取文件列表下所有文件

void getFiles(string path,__time64_t currentTime){ //文件句柄 long hFile = 0; //文件信息 struct _finddata_t fileinfo; string p; if ((hFile = _findfirst(p.assign(path).append("//*").c_str(), &fileinfo)) != -1) { do { //如果是目录,迭代之 //如果不是,加入列表 if ((fileinfo.attrib & _A_SUBDIR)) { if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0) getFiles(p.assign(path).append("//").append(fileinfo.name),currentTime); } else { int iresult; struct _stat buf; iresult = _stat(p.assign(path).append("//").append(fileinfo.name).c_str(), &buf); cout << "currentTime" << currentTime << " " << fileinfo.name << " " << buf.st_mtime << endl;//打印文件的修改时间 if ((currentTime-buf.st_atime)>12000) { //这里可以对超时文件进行操作 } } } while (_findnext(hFile, &fileinfo) == 0); _findclose(hFile); }}

时间结构体与函数参考

//<sys/stat.h> struct stat { dev_t st_dev; /* device inode resides on */ ino_t st_ino; /* inode's number */ mode_t st_mode; /* inode's mode */ nlink_t st_nlink; /* number of hard links to the file */ uid_t st_uid; /* user ID of owner */ gid_t st_gid; /* group ID of owner */ dev_t st_rdev; /* device type, for special file inode */ struct timespec st_atimespec; /* time of last access */ struct timespec st_mtimespec; /* time of last data modification */ struct timespec st_ctimespec; /* time of last file status change */ off_t st_size; /* file size, in bytes */ int64_t st_blocks; /* blocks allocated for file */ u_int32_t st_blksize;/* optimal file sys I/O ops blocksize */ u_int32_t st_flags; /* user defined flags for file */ u_int32_t st_gen; /* file generation number */ };

时间的转换

struct tm { int tm_sec; /*秒,0-59*/ int tm_min; /*分,0-59*/ int tm_hour; /*时,0-23*/ int tm_mday; /*天数,1-31*/ int tm_mon; /*月数,0-11*/ int tm_year; /*自1900的年数*/ int tm_wday; /*自星期日的天数0-6*/ int tm_yday; /*自1月1日起的天数,0-365*/ int tm_isdst; /*是否采用夏时制,采用为正数*/ }

日期贮存结构date

struct date { int da_year; /*自1900的年数*/ char da_day; /*天数*/ char da_mon; /*月数 1=Jan*/ }

时间贮存结构time

struct time { unsigned char ti_min; /*分钟*/ unsigned char ti_hour; /*小时*/ unsigned char ti_hund; unsigned char ti_sec; /*秒*/ }char *ctime(long *clock)本函数把clock所指的时间(如由函time返回的时间)转换成数下列格式的字符串:Mon Nov 21 11:31:54 1983nchar asctime(struct tm *tm)本函数把指定的tm结构类的时间转换成下列格式的字符串:Mon Nov 21 11:31:54 1983ndouble difftime(time_t time2,time_t time1)计算结构time2和time1之间的时间差距(以秒为单位)struct tm *gmtime(long *clock)本函数把clock所指的时间(如由函数time返回的时间)转换成格林威治时间,并以tm结构形式返回struct tm *localtime(long *clock)本函数把clock所指的时间(如函数time返回的时间)转换成当地标准时间,并以tm结构形式返回void tzset()本函数提供了对UNIX操作系统的兼容性long dostounix(struct date *dateptr,struct time *timeptr)本函数将dateptr所指的日期,timeptr所指的时间转换成UNIX格式, 并返回自格林威治时间1970年1月1日凌晨起到现在的秒数void unixtodos(long utime,struct date *dateptr,struct time *timeptr)本函数将自格林威治时间1970年1月1日凌晨起到现在的秒数utime转换成DOS格式并保存于用户所指的结构dateptr和timeptr中void getdate(struct date *dateblk)本函数将计算机内的日期写入结构dateblk中以供用户使用void setdate(struct date *dateblk)本函数将计算机内的日期改成由结构dateblk所指定的日期void gettime(struct time *timep)本函数将计算机内的时间写入结构timep中, 以供用户使用void settime(struct time *timep)本函数将计算机内的时间改为由结构timep所指的时间long time(long *tloc)本函数给出自格林威治时间1970年1月1日凌晨至现在所经过的秒数,并将该值存于tloc所指的单元中. int stime(long *tp)本函数将tp所指的时间(例如由time所返回的时间)写入计算机中.

参考网址


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选