使用QT+windowsapi修改文件创建时间修改时间以及最后访问时间

本文详细介绍了如何使用QT结合Windows API进行文件创建时间、修改时间及最后访问时间的修改。通过GetFileTime和SetFileTime函数实现,并解决了中文路径下时间操作的问题,采用CreateFileW函数替代CreateFileA。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用QT+windowsapi修改文件创建时间修改时间以及最后访问时间

windows系统提供了一些关于文件时间的api,这里我们主要利用了两个api。

GetFileTime();
SetFileTime();
链接: GetFileTime.
链接: SetFileTime.

i=SetFileTime(hFile,&ftUTC,(LPFILETIME) NULL, (LPFILETIME) NULL);//创建时间
i=SetFileTime(hFile,(LPFILETIME) NULL, (LPFILETIME) NULL,&ftUTC1);//修改时间
i=SetFileTime(hFile,(LPFILETIME) NULL,&ftUTC2, (LPFILETIME) NULL);//访问时间
FILETIME lpCreationTime; // 文件夹的创建时间
FILETIME lpLastAccessTime; // 对文件夹的最近访问时间
FILETIME lpLastWriteTime; // 文件夹的最近修改时间
int i =GetFileTime (hFile, &lpCreationTime, &lpLastAccessTime, &lpLastWriteTime); // 获取文件夹时间属性信息

关于具体的使用方法我也是看了很多人的博客,但是其中也遇到了一些坑。这里说一些解决办法。

去读取文件的时候发现中文路径时修改时间和获取时间会出问题。开始以为时QString与char*之间转换的问题。后来发现并不是这里的问题。
问题出在这里:
CreateFileA();
改成使用宽字节打开文件后问题解决。
CreateFileW();

HANDLE hFile;
QString url;
hFile =CreateFileW(url.toStdWString().data(),GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE , NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL,NULL);

关于在设定时间范围内随机时间,我这里将设定的时间转化成时间戳,然后取范围内的随机数,但是发现随机数的范围和频率满足不了使用。
后改用了这样的方式

//t=rand()%(etime-stime)*1000;
t = (double)rand() / (RAND_MAX + 1) *(etime - stime);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值