分享

VC++ 实现修改文件创建、访问、修改时间属性(转载)

 行走在理想边缘 2019-02-13

转载:http://sunnysab.blog.163.com/blog/static/18037500920134221295425/



struct _FILETIME {     //结构体定义
    DWORD dwLowDateTime;
    DWORD dwHighDateTime;
} FILETIME;


//FILETIME 结构表示 1601 年 1 月 1 日以来 100 纳秒为间隔数。结构包含的这两个DWORD值组合在一起


//形成一个 64 位值的 32 位值。


复制代码

typedef struct _SYSTEMTIME {
    WORD wYear;
    WORD wMonth;
    WORD wDayOfWeek;
    WORD wDay;
    WORD wHour;
    WORD wMinute;
    WORD wSecond;
    WORD wMilliseconds;
} SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME;

复制代码

头文件:
#include <windows.h> //只需要这一个

 FILETIME Filetime;
 SYSTEMTIME Systemtime;


接着,设置日期和时间,我们这里设置成1999年1月1日 01:01:01:


复制代码

Systemtime.wDay = 1;
    Systemtime.wYear = 1999;   //记住,一定要大于1601,因为FILETIME的时间是从1601年1月1日开始的
                               //如果不大于1601,SetFileTime()会返回false,GetLastError()
                               //返回78 (无效参数)
    Systemtime.wMonth = 1;
    Systemtime.wHour = 1;
    Systemtime.wMinute =1;
    Systemtime.wDayOfWeek = 1;
    Systemtime.wSecond = 1;
    Systemtime.wMilliseconds = 1;
    转换SystemTime为Filetime结构:
    SystemTimeToFileTime( &Systemtime, &Filetime ); 

复制代码

由于SetFileTime()需要文件句柄,所以只好用CreateFile()打开这个文件(微软官方实例)


按 Ctrl+C 复制代码
按 Ctrl+C 复制代码

 



if (hFile != INVALID_HANDLE_VALUE)
    {
         SetFileTime( hFile, &Filetime, &Filetime, &Filetime );
        CloseHandle(hFile);
    } 


注:SetFileTime函数

函数原型:

复制代码

BOOL SetFileTime(   //返回值:TRUE表示成功,FALSE表示失败

     HANDLE hFile,                     // 文件句柄
     CONST FILETIME *lpCreationTime,   // 文件创建时间
     CONST FILETIME *lpLastAccessTime, // 最后访问时间
     CONST FILETIME *lpLastWriteTime   // 最后修改时间
   );

复制代码

 你运行试试看,是不是OK了?不,远远不是。我们来看看程序运行后文件的创建时间:


[原]VC实现修改文件创建、访问、修改时间属性 - sunnysab - 奋斗

你会问,怎么是1999年1月1日,9:01:01?我们明明设置的是1999年1月1日,1:01:01啊!这个问题我也纠结了好半天,最后总算找到了答案:时区!

我国标准北京时间是GMT+8:00,所以你只要把时间设为GMT标准时间就可以了,不过还得再说明一下,如果你调成GMT(格林威治时间)的话,还是会有1小时的误差,也就是说Microsoft Windows的文件时间不是按的GMT(格林威治时间)来计算的。我们只要把时区调成GMT(协调世界时)就可以了。

或者,在程序中这样修改一下:

  Systemtime.wDay = 31;
     Systemtime.wYear = 1998;
     Systemtime.wMonth = 12;
     Systemtime.wHour = 17;
     Systemtime.wMinute = 1;
     Systemtime.wDayOfWeek = 1;
     Systemtime.wSecond = 1;
     Systemtime.wMilliseconds = 1;


2.文件修改时间


转载:https://www./541894.html


复制代码

CString GetModifyTime(CString appname)
{
    WIN32_FIND_DATA ffd ;
    HANDLE hFind = FindFirstFile(appname,&ffd);
    SYSTEMTIME stUTC, stLocal;
    FileTimeToSystemTime(&(ffd.ftLastWriteTime), &stUTC);
    SystemTimeToTzSpecificLocalTime(NULL, &stUTC, &stLocal);

    CString strTmp;
    strTmp.Format("%d-%d-%d,%d:%d", stLocal.wYear,stLocal.wMonth,stLocal.wDay,stLocal.wHour,stLocal.wMinute);
}

复制代码

 




    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多