文件时间属性获取与修改

      文件的时间属性一般包括:创建时间、最后修改时间、最后访问时间。一般的获取方法是:“右键”鼠标---->“属性”。而对于时间的修改则不能随意进行,尤其是创建时间。本文通过代码实现对文件时间属性的获取、修改。

1、文件时间属性获取

以"123.doc”文件为例(该文件置于代码同一路径,下同),获取其最后访问时间,其他两项时间属性同理:

#include<iostream>
#include<Windows.h>
using namespace std;


int main()
{
HANDLE hFile=CreateFile( "123.doc", // 文件名指针 
      GENERIC_WRITE,// 访问模式 
      FILE_SHARE_READ, // 共享模式 
      NULL, //安全属性 
      OPEN_EXISTING, // 创建方式 
      FILE_ATTRIBUTE_NORMAL, // 文件属性 
      NULL // 指向待复制属性的文件指针 
      );
FILETIME createTime;
FILETIME lastAccessTime;//本例获取最后访问时间,其他两项同理
FILETIME lastWriteTime;

if(INVALID_HANDLE_VALUE!=hFile)
 {
  if (GetFileTime(hFile,&createTime,&lastAccessTime,&lastWriteTime))
  {
   SYSTEMTIME st;
   memset(&st,0x0,sizeof(st));
   FileTimeToSystemTime(&lastAccessTime,&st);//将文件时间格式转换为系统时间格式(UTC格式),可以看到小时数比真实的小了8
   TIME_ZONE_INFORMATION tz;
   ::GetTimeZoneInformation(&tz);//获取当地时区信息
   SYSTEMTIME localST;
   ::SystemTimeToTzSpecificLocalTime(&tz,&st,&localST);//将UTC时间格式转换为当地时间格式,因为中国是东8区,所以转换时在小时上加了8(本函数转换时自动加的)
   printf("最后访问时间为: %d年%d月%d日 %d:%d:%d\n",localST.wYear,localST.wMonth,localST.wDay,localST.wHour,localST.wMinute,localST.wSecond);
  }
}
 CloseHandle(hFile);
 return 0;
}   


2、时间属性的修改

         仍以“123.doc”为例,对文件的创建时间进行修改。具体代码如下:

#include<iostream>
#include<Windows.h>
using namespace std;

BOOL 
SetFileTimeToNewCreateTime(HANDLE hFile,int year,int month,int day,int hour,int minute,int second,int DayofWeek/*星期:0-6*/,int Milliseconds/*毫秒值*/)
{  FILETIME ft;
   SYSTEMTIME st;//根据已知数据创造st,即系统时间格式
   
   st.wYear=year;
   st.wMonth=month;
   st.wDay=day;
   st.wHour=hour;
   st.wMinute=minute;
   st.wSecond=second;
   st.wDayOfWeek=DayofWeek;
   st.wMilliseconds=Milliseconds;

 
   SystemTimeToFileTime(&st, &ft);  // 转化为文件时间格式
    BOOL  f = SetFileTime(hFile,
                         &ft , //创建时间参数
                           (LPFILETIME) NULL,//访问时间(参数为NULL则为不修改)
                           (LPFILETIME) NULL//最后修改时间(同上)
                            );
   return f;
}

int main()
{
HANDLE hFile=CreateFile( "123.doc", // 文件名指针 
      GENERIC_WRITE,// 访问模式 
      FILE_SHARE_READ, // 共享模式 
      NULL, //安全属性 
      OPEN_EXISTING, // 创建方式 
      FILE_ATTRIBUTE_NORMAL, // 文件属性 
      NULL // 指向待复制属性的文件指针 
      );
if(SetFileTimeToNewCreateTime(2012,9,27,8,8,8,4/*星期*/,0))//注意:星期与日期相关!
        printf("更改成功");
else
       printf("更改失败!");

CloseHandle(hFile);

return 0;
}


 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值