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


    转载: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()打开这个文件(微软官方实例)

    HANDLE hFile = CreateFile( "C:\测试.txt",
                                    GENERIC_WRITE,   //这个必须有
                                    FILE_SHARE_READ | FILE_SHARE_WRITE,
                                    NULL,
                                    OPEN_EXISTING,
                                    0,
                                    NULL );
    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.xuebuyuan.com/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);
    }
  • 相关阅读:
    poj 3320 Jessica's Reading Problem
    uva 120 C
    vim使用教程-转自
    2015 俄罗斯网络赛 D. Boulevard
    HTML转义字符大全
    介绍个好点的,JAVA技术群
    JAVA学习路线
    linux常用命令大全(转)好东西要分享
    Jqprint 轻量级页面打印插件
    hadoop集群搭建
  • 原文地址:https://www.cnblogs.com/chechen/p/7059728.html
Copyright © 2020-2023  润新知