需求
在整理文件和一些其他头文件的时候,需要对其名称进行整理和修改,此工具很早就应该写了,创业后,非常忙,今天抽空写了一个顺便提供给学习。
工具和源码下载地址
本篇文章的应用包和源码包可在以下地方下载:
CSDN免积分下载地址:https://download.csdn.net/download/qq21497936/33864537
QQ群下载地址:1047134658(点击“文件”搜索“renameFile”,群内与博文同步更新)
Demo v1.2.0
1.window批量改名工具(理论上兼容ubuntu,arm,但是本司未测)
2.支持选择搜索的文件夹
3.支持搜索子文件夹
4.支持匹配方式:包含,前面匹配,后面匹配
5.支持修改方式:替换包含的内容,前面追加文本,后面追加文本
Demo v1.2.0演示
核心代码
RenameFileWidget.h
#ifndef RENAMEFILEWIDGET_H #define RENAMEFILEWIDGET_H /************************************************************\ * 控件名称: 文件改名小工具 * 控件描述: * window批量改名工具(理论上兼容ubuntu,arm,但是本司未测) * 控件功能: * 1.支持选择搜索的文件夹 * 2.支持搜索子文件夹 * 3.支持匹配方式:包含,前面匹配,后面匹配 * 4.支持修改方式:替换包含的内容,前面追加文本,后面追加文本 * 著作权信息 * 作者:红胖子(AAA红模仿) * 公司:长沙红胖子网络科技有限公司 * 网址:hpzwl.blog.csdn.net * 联系方式:QQ(21497936) 微信(yangsir198808) 电话(15173255813) * 版本信息 * 日期 版本 描述 * 2021年10月22日 v1.2.0 基本功能,样式 \************************************************************/ #include <QWidget> #include <QAbstractButton> #include <QStringListModel> namespace Ui { class RenameFileWidget; } class RenameFileWidget : public QWidget { Q_OBJECT public: explicit RenameFileWidget(QWidget *parent = 0); ~RenameFileWidget(); protected: void initControls(); protected: QStringList searchFile(QString searchDir, bool searchSubDir); protected slots: void slot_buttonClicked(QAbstractButton *pAbstractButton); private slots: void on_pushButton_browser_clicked(); void on_pushButton_reset_clicked(); void on_pushButton_search_clicked(); void on_pushButton_replace_clicked(); void on_checkBox_searchSubDir_clicked(bool checked); private: Ui::RenameFileWidget *ui; private: QStringList _fileList; QStringListModel *_pModel; }; #endif // RENAMEFILEWIDGET_H
RenameFileWidget.cpp
#include "RenameFileWidget.h" #include "ui_RenameFileWidget.h" #include <QFileDialog> #include <QButtonGroup> #include <QStringListModel> #include <QDir> #include <QDirIterator> #include <QDebug> #define LOG qDebug()<<__FILE__<<__LINE__ RenameFileWidget::RenameFileWidget(QWidget *parent) : QWidget(parent), ui(new Ui::RenameFileWidget), _pModel(0) { ui->setupUi(this); QString version = "v1.2.0"; setWindowTitle(QString("文件改名工具 %1 (长沙红胖子网络科技有限公司 QQ:21497936 微信:yangsir198808 公司网址: hpzwl.blog.csdn.net)") .arg(version)); initControls(); } RenameFileWidget::~RenameFileWidget() { delete ui; } void RenameFileWidget::initControls() { QButtonGroup *pButtonGroup = 0; // 替换选择 pButtonGroup = new QButtonGroup(this); pButtonGroup->addButton(ui->radioButton_replace); pButtonGroup->addButton(ui->radioButton_replaceAddStart); pButtonGroup->addButton(ui->radioButton_replaceAddEnd); connect(pButtonGroup, SIGNAL(buttonClicked(QAbstractButton*)), this, SLOT(slot_buttonClicked(QAbstractButton*))); // 更新控件 _pModel = new QStringListModel; _pModel->setStringList(_fileList); ui->listView->setModel(_pModel); // 初始化 ui->radioButton_replace->setChecked(true); ui->lineEdit_replace->setEnabled(true); ui->lineEdit_replaceAddHead->setEnabled(false); ui->lineEdit_replaceAddEnd->setEnabled(false); on_pushButton_reset_clicked(); } void RenameFileWidget::slot_buttonClicked(QAbstractButton *pAbstractButton) { QRadioButton *pRadioButton = dynamic_cast<QRadioButton *>(pAbstractButton); if(!pRadioButton) { LOG; return; } if(pRadioButton == ui->radioButton_replace) { ui->lineEdit_replace->setEnabled(true); ui->lineEdit_replaceAddHead->setEnabled(false); ui->lineEdit_replaceAddEnd->setEnabled(false); }else if(pRadioButton == ui->radioButton_replaceAddStart) { ui->lineEdit_replace->setEnabled(false); ui->lineEdit_replaceAddHead->setEnabled(true); ui->lineEdit_replaceAddEnd->setEnabled(false); }else if(pRadioButton == ui->radioButton_replaceAddEnd) { ui->lineEdit_replace->setEnabled(false); ui->lineEdit_replaceAddHead->setEnabled(false); ui->lineEdit_replaceAddEnd->setEnabled(true); } } void RenameFileWidget::on_pushButton_browser_clicked() { QString dir = ui->lineEdit_dirPath->text(); dir = dir.mid(0, dir.lastIndexOf("/")); QString filePath = QFileDialog::getExistingDirectory(0, "选择搜索文件夹", dir); if(filePath.isEmpty()) { return; } ui->lineEdit_dirPath->setText(filePath); } void RenameFileWidget::on_pushButton_reset_clicked() { ui->lineEdit_contain->setText(""); ui->lineEdit_endWith->setText(""); ui->lineEdit_startWith->setText(""); ui->lineEdit_replace->setText(""); ui->lineEdit_replaceAddHead->setText(""); ui->lineEdit_replaceAddEnd->setText(""); ui->checkBox_contian->setChecked(true); ui->checkBox_startWith->setChecked(false); ui->checkBox_endWidth->setChecked(false); ui->checkBox_searchSubDir->setChecked(true); } void RenameFileWidget::on_pushButton_search_clicked() { QStringList fileList = searchFile(ui->lineEdit_dirPath->text(), ui->checkBox_searchSubDir->isChecked()); _fileList.clear(); // 检测规则 if(ui->checkBox_contian->isChecked()) { for(int index = 0; index < fileList.size(); index++) { if(fileList.at(index).contains(ui->lineEdit_contain->text())) { _fileList << fileList.at(index); } } } if(ui->checkBox_startWith->isChecked()) { for(int index = 0; index < fileList.size(); index++) { if(fileList.at(index).startsWith(ui->lineEdit_startWith->text())) { _fileList << fileList.at(index); } } } if(ui->checkBox_endWidth->isChecked()) { for(int index = 0; index < fileList.size(); index++) { if(fileList.at(index).endsWith(ui->lineEdit_endWith->text())) { _fileList << fileList.at(index); } } } _pModel->setStringList(_fileList); ui->listView->setModel(_pModel); ui->label_number->setText(QString("%1").arg(_fileList.size())); } QStringList RenameFileWidget::searchFile(QString searchDir, bool searchSubDir) { QStringList listFile; if (searchDir.isEmpty()) { return listFile; } // 迭代遍历指定目录下的文件,子目录也遍历 QDirIterator iter(searchDir, QDir::Files, searchSubDir ? QDirIterator::Subdirectories : QDirIterator::NoIteratorFlags); while (iter.hasNext()) { iter.next(); QFileInfo info = iter.fileInfo(); listFile << info.absoluteFilePath(); } return listFile; } void RenameFileWidget::on_pushButton_replace_clicked() { for(int index = 0; index < _fileList.size(); index++) { QString fileName = _fileList.at(index); QString dir = fileName.left(fileName.lastIndexOf("/")); QString file = fileName.mid(fileName.lastIndexOf("/") + 1); QString ext = ""; if(file.contains(".")) { ext = file.mid(file.lastIndexOf(".") + 1); file = file.left(file.lastIndexOf(".")); } LOG << fileName << dir << file << ext; if(ui->radioButton_replace->isChecked()) { file.replace(ui->lineEdit_contain->text(), ui->lineEdit_replace->text()); QFile::rename(fileName, QString("%1/%2.%3").arg(dir).arg(file).arg(ext)); }else if(ui->radioButton_replaceAddStart->isChecked()) { file.push_front(ui->lineEdit_replaceAddHead->text()); QFile::rename(fileName, QString("%1/%2.%3").arg(dir).arg(file).arg(ext)); }else if(ui->radioButton_replaceAddEnd->isChecked()) { file.push_front(ui->lineEdit_replaceAddEnd->text()); QFile::rename(fileName, QString("%1/%2.%3").arg(dir).arg(file).arg(ext)); } } } void RenameFileWidget::on_checkBox_searchSubDir_clicked(bool checked) { ui->label_subDir->setText(checked ? "是" : "否"); }