首页 > 其他 > 详细

个人第一款小工具-批量文件重命名By Qt 5(Qt 5.2.1 + MSVC2012)

时间:2014-03-22 00:35:35      阅读:1052      评论:0      收藏:0      [点我收藏+]

  最近在做一个课程设计,要接触到大量的数据资料什么的,网上下载的,自己到处搜集的。为了把资料有序的整理起来,对文件重命名显得比较关键了。于是上网找了一些小工具,但是感觉网上的工具很杂,就想着自己写一个。

      下面说一下开发环境,win7 64bit + Qt5.2.1 + MSVC2012,因为是初学qt,所以很多库都还不是很熟悉,做出来的界面比较搓。运行的大体效果如下:

bubuko.com,布布扣

这款小软件实现的功能主要有:

1.文件夹及其根目录下的文件夹文件的重命名;

2.具有过滤特定文件、自定义文件名的功能;

下面是实际运行时的截图:

bubuko.com,布布扣

运行的还蛮快的,很迅速。下面把主要程序,也就是文件重命名部分的代码贴出来,与大家分享,不足之处,希望各位大神批评指正;

bubuko.com,布布扣
 1 void Widget::progress_dirs(QString &source_dir, QString &dest_dir) //process dirs
 2 {
 3     QStringList filter_temp;
 4     int i = 0;
 5     QDir *dir = new QDir(source_dir);
 6     dir->setFilter(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot); //do not list . and ..
 7     QList<QFileInfo> *fileInfo = new QList<QFileInfo>(dir->entryInfoList(filter_temp));
 8 
 9     if(set_range_flag == 0)
10     {
11         ui->progressBar->setRange(0, fileInfo->count());
12         set_range_flag = 1;
13     }
14 
15     for(int j = 0; j < fileInfo->count(); j++)
16     {
17         if(source_dir == directory_open)
18         {
19             ui->progressBar->setValue(j + 1);
20         }
21 
22         if(fileInfo->at(j).isDir())
23         {
24             if(ui->checkBox_Dir->isChecked())
25             {
26                 QStringList dir_temp = (fileInfo->at(j).filePath()).split("/");
27                 QString dest_dir_new = dest_dir + "/" + dir_temp.last();
28                 QDir my_dir;
29                 if(!my_dir.exists(dest_dir_new))
30                 {
31                     my_dir.mkpath(dest_dir_new);
32                 }
33                 progress_dirs(fileInfo->at(j).filePath(), dest_dir_new); //circle to sub dir
34             }
35         }
36         else
37         {
38             QFileInfo temp(fileInfo->at(j).fileName());
39             QString suffix = temp.suffix();
40 
41             QString suffix_temp = "*." + suffix;
42             QStringList result = filter.filter(suffix_temp);
43 
44             if(result.isEmpty())
45             {
46                 continue;
47             }
48             else
49             {
50                 QFile::rename(fileInfo->at(j).filePath(), (dest_dir + "/" + prefix + link + QString::number(i + start_number) + "." + suffix));
51 
52                 if(source_save) //if choose save source, keep a backup
53                 {
54                     QFile::copy((dest_dir + "/" + prefix + link + QString::number(i + start_number) + "." + suffix), fileInfo->at(j).filePath());
55                 }
56                 i++;
57             }
58 
59         }
60 
61     }
62 }
bubuko.com,布布扣

主程序主要由两个分支组成,第一个分支处理文件夹下包含文件夹的问题,程序中利用到了递归的算法,找出所有文件夹下面的根文件夹;第二个分支用来处理文件夹下面具体文件的重命名。我感觉这一部分我实现的不太好,当勾选保留源文件时,代码中使用QFile::copy来将已经命名好的源文件放回去,这样虽然实现了,但是始终感觉不到位,大家如果有好的方法,可以与我讨论。

  至于界面相关的问题,因为我这个界面很简单,大家一看就应该知道是这么做的,所以那部分的代码没有贴。

 

  目前还有一个问题,我这个程序在自己本机上面能够单独运行,不会提示缺少dll文件什么的,但是放到别人电脑上面就会提示缺少dll等错误,大家有没有什么好的办法解决一下?下面是我本机上面单独运行的截图:

bubuko.com,布布扣

 个人原创,转载请注明出处:http://www.cnblogs.com/Jack-Lee/p/3616882.html

个人第一款小工具-批量文件重命名By Qt 5(Qt 5.2.1 + MSVC2012),布布扣,bubuko.com

个人第一款小工具-批量文件重命名By Qt 5(Qt 5.2.1 + MSVC2012)

原文:http://www.cnblogs.com/Jack-Lee/p/3616882.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!