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

  • Post author:
  • Post category:其他


使用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);



版权声明:本文为carrottttt原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。