最近在做一个基于P2P的目录文件自动同步软件,开发环境用VC++ 2003,主要用QT FRAMEWORK而不是MFC(其实不会MFC)来实现跨平台用途,通信部分主要用UDT+TCP,UDT是基于UDP并实现了可靠传输的应用层的协议,用UDT也是因为它为NAT穿透的实现提供了理论上的可行性(基于UDP,当然不是说TCP无法打洞,而是实现相对复杂而且成功率低)。
    虽然QT提供了尽可能多的功能,我也尽量用QT提供的功能而不是平台特定的一些功能,但QT毕竟不是万能,我在做修改文件最后修改日期时间(因为同步时候要判断文件最后修改日期时间,从而对重名文件进行合理同步)的时候,找遍了QT(我是用QT 3.3.4,也许最新的QT4提供吧)也没找到此类功能。没办法,这部分只有自己来实现跨平台了。独立出此功能的接口,编译时宏判断当前平台,接下来就可以用平台独立的函数了。因为我的确对WINAPI不熟悉,好不容易找到一个叫做SetFileTime的WINAPI函数,查看MSDN找到使用方法,因为SetFileTime接受的是FILETIME类型,FILETIME又无法直接修改具体日期时间,于是定义一个SYSTEMTIME变量,设定好日期时间,然后用SystemTimeToFileTime把SYSTEMTIME转换为一个FILETIME类型,最后用SetFileTime。本以为这样就大功告成,结果程序调试时候老是不停在同步更新,我觉得奇怪,按理说一段时间后,所有机器的同步目录下的文件应该保持稳定,就不在更新了。开始还怀疑是逻辑问题,但跟踪了半天都没发现问题,最后发现凡是调用SetFileTime的文件,其修改日期都比我设定的日期多了8个小时,想到中国本地又是GMT+8。于是查找MSDN,发现还需要调用LocalFileTimeToFileTime把当前的本地时间转换为UTC标准时间。再次测试一切正常!

具体代码类似如下:

#ifdef WIN32    
            SYSTEMTIME systime;
            FILETIME ft, ftUTC;
            HANDLE hFile;

            systime.wYear  =  l_year;
            systime.wMonth  =  l_month;
            systime.wDay  =  l_day;
            systime.wHour  =  l_hour;
            systime.wMinute  =  l_minute;
            systime.wSecond  =  l_second;
            systime.wMilliseconds  =  l_millsecond;                

            SystemTimeToFileTime( & systime,  & ft);
            LocalFileTimeToFileTime( & ft, & ftUTC);

            hFile  =  CreateFile( filePathName, GENERIC_READ  |  GENERIC_WRITE,
                FILE_SHARE_READ |  FILE_SHARE_WRITE,
                NULL,
                OPEN_EXISTING,
                FILE_ATTRIBUTE_NORMAL,
                NULL);            
            SetFileTime(hFile, (LPFILETIME) NULL, (LPFILETIME) NULL,  & ftUTC);
            CloseHandle(hFile);
#endif

转载于:https://www.cnblogs.com/leaway/archive/2007/01/22/626437.html

Windows平台上修改某个文件的创建、访问、修改日期时间属性相关推荐

  1. (转)在Windows平台上安装Node.js及NPM模块管理

    本文转载自:http://www.cnblogs.com/seanlv/archive/2011/11/22/2258716.html 之前9月份的时候我写了一篇关于如何在Windows平台上手工管理 ...

  2. 在Windows平台上安装Node.js及NPM模块管理

    1. 下载Node.js官方Windows版程序:http://nodejs.org/#download     从0.6.1开始,Node.js在Windows平台上提供了两种安装方式,一是.MSI ...

  3. Windows平台上安装搭建iPhone/iPad的开发环境

    很多朋友希望在体验或学习iphone开发,但是iphone开发环境一般需要 安装在mac计算机下mac os中. 这给许多朋友带来了额外成本投入. 网上已经有各种破解方法,在非苹果电脑上安装iphon ...

  4. x264代码剖析(一):图文详解x264在Windows平台上的搭建

    x264代码剖析(一):图文详解x264在Windows平台上的搭建 X264源码下载地址:http://ftp.videolan.org/pub/videolan/x264/ 平台:win7 PC. ...

  5. 在.NET 3.5 平台上使用LINQ to SQL创建三层/多层Web应用系统 (Part 1)

    在.NET 3.5 平台上使用LINQ to SQL创建三层/多层Web应用系统 (Part 1) 在新的.Net Framework 3.5平台上,Microsoft发布了LINQ(C# 3.0, ...

  6. 管家婆 源码 php,在windows平台上构建本身的PHP

    这是一篇翻译的文章,原文拜见:https://wiki.php.net/internals/windows/stepbystepbuild 趁便提一句,wiki.php.net有很多出色的内容,想深切 ...

  7. 在 Microsoft Windows 平台上安装 JDK 17

    在 Microsoft Windows 平台上安装 JDK 本主题包括以下部分: 在 64 位 Windows 平台上安装 JDK 的系统要求 Windows JDK 安装说明符号 Windows J ...

  8. 正版软件 Directory Opus 12 Pro Windows 平台上的资源管理器,定是功能完全、可定制化程度高的那款。

    Directory Opus 是一款 Windows 平台上的资源管理器,定是功能最完全.可定制化程度最高的那款.你可以通过它完成几乎所有操作,包括查看图片元信息.预览图片.阅读文本文件内容.批量重命 ...

  9. Windows平台上一些开发软件的卸载与安装@大蟒蛇马戏团

    Windows平台上一些开发软件的卸载与安装 JDK的卸载 Windows+R 打开运行命令栏输入命令 control 卸载程序. 卸载环境变量. JDK的安装 获取JDK甲骨文官网 注意安装路径(最 ...

  10. 细数 Windows 平台上的 NoSQL 数据库

    从可查询的分布式解决方案,如MongoDB,到简单的分布式Key/Value存储解决方案,如Cassandra.此外,还有Riak,Tokyo Cabinet,Voldemort,CouchDB和Re ...

最新文章

  1. jQuery addClass,removeClass,class属性增删
  2. python异常之ModuleNotFoundError: No module named ‘test01inner02‘
  3. 都2021年了,输入法还能怎么玩出花?百度智慧输入:toB商业化!
  4. Alpha版本项目展示要求
  5. linux中bash的功能主要有,Linux系统中的Bash功能的介绍
  6. 当前最主流的商业模式,普通老板如何打造强大后端实现躺赚的秘诀!
  7. arraylist如何检测某一元素是否为空_java学习笔记:【ArrayList集合】
  8. Javascript中的翻转器
  9. FastDFS学习总结(2)--Tracker与Storage配置详解
  10. 西瓜书《机器学习》决策树IDW3, C4.5公式推导
  11. 斗鱼VS虎牙,谁才是直播之王?一文带你看看两家平台 的竞品报告
  12. 30000台苹果电脑遭恶意软件入侵,包括最新的M1系列
  13. xshell用无线网远程连接linux失败_vnc远程控制软件怎么用,3个步骤教你vnc远程控制软件怎么用...
  14. Vue项目实战:订单确认页面实现
  15. ABAP-逻辑数据库
  16. 力扣比赛 5454. 统计全 1 子矩形
  17. 如何与更优秀的人做朋友
  18. C++到底还能做什么? ----感觉说的还是很有道理的,共勉!
  19. esp12s 第十二章 舵机控制
  20. QT程序按钮效果制作

热门文章

  1. 3263: 6.导弹对对碰
  2. STM32串口通信代码正确串口却没反应
  3. Postman设置中文
  4. 基于PSO粒子群算法的MPPT最大功率跟踪Simulink仿真,PSO采用S函数实现
  5. springboot 配置404页面
  6. cubemx 使用 学习跳转链接
  7. Excel中VBA实现文件夹表格合并和数据提取
  8. NetApp SnapCenter 备份管理 ——借助应用程序一致的数据备份管理,简化混合云操作
  9. JAVA8 lambda按指定字段去重
  10. Android第一行代码-Activity