惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
T
Threatpost
阮一峰的网络日志
阮一峰的网络日志
美团技术团队
F
Fortinet All Blogs
The GitHub Blog
The GitHub Blog
月光博客
月光博客
V
Visual Studio Blog
T
Tailwind CSS Blog
Stack Overflow Blog
Stack Overflow Blog
博客园 - 聂微东
Jina AI
Jina AI
J
Java Code Geeks
Martin Fowler
Martin Fowler
大猫的无限游戏
大猫的无限游戏
Recorded Future
Recorded Future
C
Check Point Blog
腾讯CDC
N
Netflix TechBlog - Medium
aimingoo的专栏
aimingoo的专栏
罗磊的独立博客
Hacker News: Ask HN
Hacker News: Ask HN
SecWiki News
SecWiki News
博客园 - Franky
Hacker News - Newest:
Hacker News - Newest: "LLM"
N
News | PayPal Newsroom
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
S
Security @ Cisco Blogs
W
WeLiveSecurity
The Last Watchdog
The Last Watchdog
Cloudbric
Cloudbric
F
Full Disclosure
The Cloudflare Blog
Y
Y Combinator Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Google DeepMind News
Google DeepMind News
MongoDB | Blog
MongoDB | Blog
S
Schneier on Security
Schneier on Security
Schneier on Security
Spread Privacy
Spread Privacy
L
LINUX DO - 热门话题
AI
AI
N
News and Events Feed by Topic
T
Tor Project blog
P
Palo Alto Networks Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
H
Hackread – Cybersecurity News, Data Breaches, AI and More
G
Google Developers Blog

博客园 - Alex Lee

开始学习DW QextSerialPort 编译指南 [转]SlickEdit 设置点滴 [转帖]mysql消除乱码方法集 简体中文的MSI形式的安装程序显示乱码的处理 VoIP之语音编码器 SIP简介 SIP简介及工作原理 算法收集(不断更新) MYSQL数据同步 注册一个公司的费用和常见问题参考 创业者不得不去的10个网站! 一个简单的算法题 硬件方案终于谈下来了,松了一口气,呼 44B0X串口扩展 Dependency下载网站 要做个P2P应用,先收集点相关基于UDP可靠传输的资料 规则文本数据文件根据关键字段进行排序的实现 ClassA A() 在幕后做了什么?
Windows平台上修改某个文件的创建、访问、修改日期时间属性
Alex Lee · 2007-01-22 · via 博客园 - Alex Lee

    最近在做一个基于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