当前位置: 首页 > article >正文

QT-文件创建时间修改器

由于对某些文件需要进行时间修改,因此写了一个小的例子:
此程序具备拖拽文件功能,代码如下

#include "MainWindow.h"


void GetFileTime(const char* filePath)
{
	FILETIME creationTime, lastAccessTime, lastWriteTime;
	//HANDLE hFile = CreateFile(filePath, GENERIC_READ, FILE_SHARE_READ, nullptr, OPEN_EXISTING, 0, nullptr);
	HANDLE hFile = CreateFile(filePath, GENERIC_READ, FILE_SHARE_READ, nullptr, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, nullptr);
	if (hFile != INVALID_HANDLE_VALUE)
	{
		if (GetFileTime(hFile, &creationTime, &lastAccessTime, &lastWriteTime))
		{
			SYSTEMTIME stUTC, stLocal;
			FileTimeToSystemTime(&creationTime, &stUTC);
			SystemTimeToTzSpecificLocalTime(nullptr, &stUTC, &stLocal);

			//std::wcout << L"File: " << filePath << std::endl;
			//std::wcout << L"Creation Time: " << stLocal.wYear << L"-" << stLocal.wMonth << L"-" << stLocal.wDay
			//	<< L" " << stLocal.wHour << L":" << stLocal.wMinute << L":" << stLocal.wSecond << std::endl;
		}
		CloseHandle(hFile);
	}
}

void SetFileTime(const char* filePath, const FILETIME& newTime)
{
	//HANDLE hFile = CreateFile(filePath, FILE_WRITE_ATTRIBUTES, FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, OPEN_EXISTING, 0, nullptr);
	HANDLE hFile = CreateFile(filePath, FILE_WRITE_ATTRIBUTES, FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, nullptr);
	if (hFile != INVALID_HANDLE_VALUE)
	{
		SetFileTime(hFile, &newTime, &newTime, &newTime);
		CloseHandle(hFile);
	}

}

MainWindow::MainWindow(QWidget *parent)
	: QMainWindow(parent)
{
	ui.setupUi(this);
	setAcceptDrops(true);

	connect(ui.pushButton, SIGNAL(clicked()), this, SLOT(OnPushButton()));
}

MainWindow::~MainWindow()
{}

void MainWindow::dragEnterEvent(QDragEnterEvent * event)
{
	if (event->mimeData()->hasUrls())
	{
		event->acceptProposedAction();
	}
	else
		event->ignore();
}

void MainWindow::dropEvent(QDropEvent * event)
{
	const QMimeData *mimeData = event->mimeData();
	if (mimeData->hasUrls())
	{
		QList<QUrl> urlList = mimeData->urls();
		urlList.size();
		QStringList fileName;// = urlList.at(0).toLocalFile();
		for (int i = 0; i < urlList.size(); i++)
		{
			fileName.push_back(urlList.at(i).toLocalFile());
			qDebug() << urlList.at(i).toLocalFile();
			ui.lineEdit->setText(urlList.at(i).toLocalFile());
		}
	}
}

void MainWindow::OnPushButton()
{
	QString exePath = ui.lineEdit->text();

	SYSTEMTIME st;
	//GetSystemTime(&st);
	QDateTime dateTime1 = ui.dateTimeEdit->dateTime().toLocalTime();
	QDateTime dateTime = dateTime1.toUTC();
	st.wYear   = dateTime.date().year();
	st.wMonth  = dateTime.date().month();
	st.wDay    = dateTime.date().day();
	st.wHour   = dateTime.time().hour();
	st.wMinute = dateTime.time().minute();
	st.wSecond = dateTime.time().second();
	st.wMilliseconds = dateTime.time().msec();
	FILETIME newTime;
	SystemTimeToFileTime(&st, &newTime);

	SetFileTime(exePath.toLocal8Bit(), newTime);

	GetFileTime(exePath.toLocal8Bit());

}
#pragma once

#include <QMainWindow>
#include "ui_MainWindow.h"

#include <QApplication>

#include <Windows.h>

#include <QDebug>
#include <QMimeData>
#include <QLineEdit>
#include <QDropEvent>
#include <QDragEnterEvent>

using namespace std;
class MainWindow : public QMainWindow
{
	Q_OBJECT

public:
	MainWindow(QWidget *parent = nullptr);
	~MainWindow();

protected:
	//拖拽外部文件读取arom功能
	void dragEnterEvent(QDragEnterEvent *event);  //拖拽进入事件

	void dropEvent(QDropEvent *event);  //放下事件

private slots:
	void OnPushButton();

private:
	Ui::MainWindowClass ui;
};


http://www.kler.cn/news/326851.html

相关文章:

  • 安全运营 -- GPO审计
  • Chrome Cookie最大有效期
  • Web3的愿景:如何构建去中心化的互联网
  • Llama微调以及Ollama部署
  • 阿里云k8s如何创建可用的api token
  • 腾讯云SDK产品优势
  • 4.2.1 通过DTS传递物理中断号给Linux
  • 全面指南:探索并实施解决Windows系统中“mfc140u.dll丢失”的解决方法
  • NAND Flash虚拟层坏块管理机制
  • python爬虫案例——抓取链家租房信息(8)
  • Solaris11.4配置远程桌面登录
  • STM32 软件触发ADC采集
  • 基于MATLAB的苹果外观特征检测
  • 【计算机网络 - 基础问题】每日 3 题(二十六)
  • 针对考研的C语言学习(定制化快速掌握重点4)
  • IDEA几大常用AI插件
  • Splashtop 加入 Microsoft 智能安全协会
  • VBA解除Excel工作表保护
  • 浅析Android中的View事件分发机制
  • 19.2 编写dockerfile和k8s yaml
  • 迁移学习案例-python代码
  • Redis一些简单通用命令认识常用数据类型和编码方式认识Redis单线程模型
  • OJ题之单链表排序
  • 智慧城市运营模式--联合公司运营
  • ThinkPHP发送邮件教程:从配置到发送指南!
  • ChatGPT的150个角色提示场景实测(9)讲故事
  • django drf 分页器
  • 【Spring基础3】- Spring的入门程序
  • 【从0开始搭建微服务并进行部署】SpringBoot+dubbo+zookeeper
  • 数据结构——栈的基本操作