個人第一款小工具-批量檔案重新命名By Qt 5(Qt 5.2.1 + MSVC2012)

weixin_34104341發表於2020-04-07

  最近在做一個課程設計,要接觸到大量的資料資料什麼的,網上下載的,自己到處蒐集的。為了把資料有序的整理起來,對檔案重新命名顯得比較關鍵了。於是上網找了一些小工具,但是感覺網上的工具很雜,就想著自己寫一個。

      下面說一下開發環境,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

轉載於:https://www.cnblogs.com/Jack-Lee/p/3616882.html

相關文章