Qt 修改文件历史修改时间

前言

本章程序功能
1.修改本地文件历史修改时间
2.修改本地文件历史访问时间

程序功能展示

在这里插入图片描述

程序源码

#include <QApplication>
#include <QDateTime>
#include <QDebug>
#include <QFileInfo>

#include "time.h"
#ifdef _WIN32
#include "sys/utime.h"
#else
#include "utime.h"
#endif

int ChangeFileDateTime(QDateTime lastModify,QDateTime lastRead,QString FilePathName)
{
    //QDateTime LastModifyTime = QDateTime::fromString(lastModifiedDateTime, "yyyyMMdd hh:mm:ss");
    //QDateTime lastRead = QDateTime::fromString(lastReadDateTime, "yyyyMMdd hh:mm:ss");
    qDebug() << "ModifyFileDateTime" << lastModify << lastRead << FilePathName;
    if(FilePathName.isEmpty() || !lastModify.isValid() || lastModify.isNull() || !lastRead.isValid() || lastRead.isNull())
        return -1;

    int aYear = lastModify.date().year()-1900;
    int aMonth = lastModify.date().month()-1;
    int aDay = lastModify.date().day();
    int aHour = lastModify.time().hour();
    int aMinute = lastModify.time().minute();
    int aSec = lastModify.time().second();

    struct tm modify = {0};
    modify.tm_year = aYear;
    modify.tm_mon = aMonth;
    modify.tm_mday = aDay;
    modify.tm_hour = aHour;
    modify.tm_min = aMinute;
    modify.tm_sec = aSec;
    modify.tm_isdst = 0;

    int cYear = lastRead.date().year()-1900;
    int cMonth = lastRead.date().month()-1;
    int cDay = lastRead.date().day();
    int cHour = lastRead.time().hour();
    int cMinute = lastRead.time().minute();
    int cSec = lastRead.time().second();

    struct tm read = {0};
    read.tm_year = cYear;
    read.tm_mon = cMonth;
    read.tm_mday = cDay;
    read.tm_hour = cHour;
    read.tm_min = cMinute;
    read.tm_sec = cSec;
    read.tm_isdst = 0;
    
#ifdef _WIN32
    struct _utimbuf ut;
#else
    struct utimbuf ut;
#endif

    //二者得同修修改,否则修改不成功
    ut.modtime = mktime(&modify);// 最后修改时间
    ut.actime=mktime(&read);//最后访问时间
    //QByteArray ary=FilePathName.toUtf8();
    QByteArray ary=FilePathName.toLocal8Bit();
    //qDebug() << "ary" << ary;
    char *fileName = ary.data();
    int result=-1;

#ifdef _WIN32
    result=_utime(fileName, &ut );
#else
    result=utime(fileName, &ut );
#endif
    return result;//-1表示修改失败
}

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QString fileName = "C:/Users/jbyyy/Desktop/录屏gif工具.exe";
    QFileInfo fileInfo(fileName);
    qDebug() << "历史修改时间" << fileInfo.lastModified();
    qDebug() << "历史访问时间" << fileInfo.lastRead();
    //修改历史修改时间 历史访问时间
    int flag = ChangeFileDateTime(QDateTime(QDate(1997,11,8),QTime(13,14,21)),\
                                  QDateTime(QDate(2001,8,12),QTime(13,14,21)),fileName);
    qDebug() << "修改状态:" << flag;
    fileInfo.refresh();
    qDebug() << "历史修改时间" << fileInfo.lastModified();
    qDebug() << "历史访问时间" << fileInfo.lastRead();

    return a.exec();
}

存在问题

在win10上 程序中虽然显示历史访问时间修改成功,但是右键查看文件属性发现访问时间并没有修改成功,显示时间为调用_utime函数接口的时间点。

在这里插入图片描述
但在ubuntu系统中 历史修改时间和访问时间都修改成功
在这里插入图片描述

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jbyyy、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值