Windows平台上修改某个文件的创建、访问、修改日期时间属性
最近在做一个基于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标准时间。再次测试一切正常!
具体代码类似如下:
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平台上修改某个文件的创建、访问、修改日期时间属性相关推荐
- (转)在Windows平台上安装Node.js及NPM模块管理
本文转载自:http://www.cnblogs.com/seanlv/archive/2011/11/22/2258716.html 之前9月份的时候我写了一篇关于如何在Windows平台上手工管理 ...
- 在Windows平台上安装Node.js及NPM模块管理
1. 下载Node.js官方Windows版程序:http://nodejs.org/#download 从0.6.1开始,Node.js在Windows平台上提供了两种安装方式,一是.MSI ...
- Windows平台上安装搭建iPhone/iPad的开发环境
很多朋友希望在体验或学习iphone开发,但是iphone开发环境一般需要 安装在mac计算机下mac os中. 这给许多朋友带来了额外成本投入. 网上已经有各种破解方法,在非苹果电脑上安装iphon ...
- x264代码剖析(一):图文详解x264在Windows平台上的搭建
x264代码剖析(一):图文详解x264在Windows平台上的搭建 X264源码下载地址:http://ftp.videolan.org/pub/videolan/x264/ 平台:win7 PC. ...
- 在.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, ...
- 管家婆 源码 php,在windows平台上构建本身的PHP
这是一篇翻译的文章,原文拜见:https://wiki.php.net/internals/windows/stepbystepbuild 趁便提一句,wiki.php.net有很多出色的内容,想深切 ...
- 在 Microsoft Windows 平台上安装 JDK 17
在 Microsoft Windows 平台上安装 JDK 本主题包括以下部分: 在 64 位 Windows 平台上安装 JDK 的系统要求 Windows JDK 安装说明符号 Windows J ...
- 正版软件 Directory Opus 12 Pro Windows 平台上的资源管理器,定是功能完全、可定制化程度高的那款。
Directory Opus 是一款 Windows 平台上的资源管理器,定是功能最完全.可定制化程度最高的那款.你可以通过它完成几乎所有操作,包括查看图片元信息.预览图片.阅读文本文件内容.批量重命 ...
- Windows平台上一些开发软件的卸载与安装@大蟒蛇马戏团
Windows平台上一些开发软件的卸载与安装 JDK的卸载 Windows+R 打开运行命令栏输入命令 control 卸载程序. 卸载环境变量. JDK的安装 获取JDK甲骨文官网 注意安装路径(最 ...
- 细数 Windows 平台上的 NoSQL 数据库
从可查询的分布式解决方案,如MongoDB,到简单的分布式Key/Value存储解决方案,如Cassandra.此外,还有Riak,Tokyo Cabinet,Voldemort,CouchDB和Re ...
最新文章
- jQuery addClass,removeClass,class属性增删
- python异常之ModuleNotFoundError: No module named ‘test01inner02‘
- 都2021年了,输入法还能怎么玩出花?百度智慧输入:toB商业化!
- Alpha版本项目展示要求
- linux中bash的功能主要有,Linux系统中的Bash功能的介绍
- 当前最主流的商业模式,普通老板如何打造强大后端实现躺赚的秘诀!
- arraylist如何检测某一元素是否为空_java学习笔记:【ArrayList集合】
- Javascript中的翻转器
- FastDFS学习总结(2)--Tracker与Storage配置详解
- 西瓜书《机器学习》决策树IDW3, C4.5公式推导
- 斗鱼VS虎牙,谁才是直播之王?一文带你看看两家平台 的竞品报告
- 30000台苹果电脑遭恶意软件入侵,包括最新的M1系列
- xshell用无线网远程连接linux失败_vnc远程控制软件怎么用,3个步骤教你vnc远程控制软件怎么用...
- Vue项目实战:订单确认页面实现
- ABAP-逻辑数据库
- 力扣比赛 5454. 统计全 1 子矩形
- 如何与更优秀的人做朋友
- C++到底还能做什么? ----感觉说的还是很有道理的,共勉!
- esp12s 第十二章 舵机控制
- QT程序按钮效果制作