zoukankan      html  css  js  c++  java
  • 个人第一款小工具-批量文件重命名By Qt 5(Qt 5.2.1 + MSVC2012)

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

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

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

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

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

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

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

     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 }

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

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

       下面说一下发布的问题,在这里我参考了该博客里面的方法,http://blog.csdn.net/gzshun/article/details/7495488。按照博主的打包过程做,一般不会有什么问题,我想强调一下的是,发布之前,一定要在几台不同电脑上面测试没问题后再打包,我之前就是只在自己电脑上面测试了一下,后来拷到别人电脑上去时,才发现用不了。

      还有一点,就是第一次在本机上面单独运行时,可能会提示各种dll丢失,可以根据提示进行添加,这里我参考了http://blog.sina.com.cn/s/blog_a6fb6cc90101fer8.htmlhttp://hi.baidu.com/dbzhang800/item/5c92691dc965017a7a5f2542这两篇博客的内容,但是到最后,还是提示说有几个dll缺失,如下图所示:


     为了解决这个问题,我在论坛上面到处问,但是没人叼我,确实,可能高手对这种问题都不屑一顾吧,终于,我在一个国外的论坛上面找到了答案,在此,我不得不佩服国外大神的奉献精神,而相比国内某些“技术牛人”,不得不吐槽一下,出问题了只有自己找答案,很少有人会回复你,这真是真理。那个国外论坛解决办法的链接是 http://stackoverflow.com/questions/17023419/win-7-64-bit-dll-problems ,具体的解决办法如下图:

    上面的步骤讲的很清楚,我就是按照上面的方法解决的,如果还有问题,可以联系我,我如果会的话,会尽量帮忙的,毕竟是新手,多多交流学习一下嘛。

    本软件的下载地址:http://pan.baidu.com/s/1jGyrrsM,欢迎大家使用,不足之处,恳请批评指正。

    个人原创,转载请注明出处:http://www.cnblogs.com/Jack-Lee/p/3616882.html
  • 相关阅读:
    利用Mono.Cecil动态修改程序集来破解商业组件(仅用于研究学习) 转 武胜
    探讨C语言中的回调函数
    BusyBox
    ISC的DHCP服务器
    exchange 2007 安装
    strcpy和memcpy的区别 | strcpy和strncpy的区别
    爱不是什么
    编译libnl时候的问题
    Linux中find常见用法示例
    ubuntu firefox flash 插件安装
  • 原文地址:https://www.cnblogs.com/Jack-Lee/p/3616882.html
Copyright © 2011-2022 走看看