剛做了乙個用qt開發的玩具程式,寫篇筆記記錄一下;有乙個問題是這樣的:有乙份excel表,裡面存著一大堆的專利號和其對應的專利名稱,資料量不大,大概一千個;然後有乙個資料夾,裡面有一堆pdf,jpg,tif型別的檔案,這些檔案是專利書的影印件,但是名字比較亂,現在需要將名字的格式統一為excel的格式,也就是序號+專利號+專利名稱,問題的情況如下圖:
根據這個玩具程式,稍微了解了一下qt建立檔案,讀取檔案和檔名,修改檔名,開啟檔案和資料夾等操作
一、文字檔案的讀取
首先新增標頭檔案,這裡的qfile有qt對檔案操作的介面
#include
在標頭檔案的mainwindow類內開兩個函式和四個陣列
class mainwindow : public qmainwindow
;
接下來在mainwindow.cpp中實現txt檔案讀取的函式:
void mainwindow::readtxtfile(qstring url)
的作用是檢驗是否成功開啟該檔案,順帶設定檔案的開啟方式為唯讀
3、
line = file.readline();
rowfile[linecount] = line;
的作用是讀取一行的資料,並將資料傳輸給rowfile陣列
4、
rowfile[linecount] = rowfile[linecount].trimmed();
的作用是去除字串兩端的空白符(空格\t,tab,回車\n)
5、
code[linecount] = rowfile[linecount].mid(0,3);
mid的作用是擷取從第0個字元開始,長度為3的字元,並將擷取的字元賦值給code[linecount]
這時,我們只要把excel檔案的前三列資料複製到txt檔案中,就可以分別將序號,專利號,專利名稱存放在三個對應的陣列中了
出現的問題:
實際讀取txt檔案的時候,檔案內部有數字,有字母,有漢字,由於qt不知道將中文以何種方式顯示出來,會出現亂碼;
解決方法:
設定文字編碼型別
首先新增標頭檔案:
#include在函式中加入**:
qtextcodec將*codec
=qtextcodec::codecforname("gbk");
rowfile[linecount] = line;
改為:
qstringstr=
codec->tounicode(line);
rowfile[linecount]=二、讀取檔案的路徑及檔名str;
voidmainwindow::changename(qstring
url)
dir.setfilter(qdir::files);//設定dir的過濾模式,表示只遍歷本資料夾內的檔案
qfileinfolistfilelist
=dir.entryinfolist();
//獲取本資料夾內所有檔案的資訊
intfilecount=filelist.count();
//獲取本資料夾內的檔案個數
qdebug()<for(int<
i=0;i
//遍歷每個檔案
/*獲取檔案字尾名*/
}
}基本思路是:
1、先根據路徑找到有關資料夾:
qdirdir(url);
if(dir.exists())2、獲取資料夾內檔案的個數://判斷資料夾是否存在
int3、for迴圈遍歷每乙個檔案,獲取檔案路徑和資訊filecount
=filelist.count();
//獲取本資料夾內的檔案個數
for(int我用的是qtdesigner建立,以上為槽函式i=0;i
至此,基本的邏輯就實現了
批量修改檔名
10.1整理女兒 的時候,發現從老婆手機拍出來的 檔名不帶拍照日期的,這樣有個問題,就是那麼積累了2年的 無法顯眼的知道是什麼時候拍的,而且在轉移 的時候,容易把修改日期更改掉,這樣就會丟失拍照的日期,對後續回憶 的時候就不知道當時女兒多大。如果手工修改,那麼幾千張 修改工作量實在太大,以修改一張 ...
批量修改檔名
批量修改檔案字尾 include include include includeint main else char newname 1024 fgets oldname,1024,fp int length strlen oldname 把讀到字串最後的回車 換成 0 表示字串的結束標示 oldn...
批量修改檔名
ren命令可用於修改檔案的名稱,包括字尾名。比如,將d盤中的1.jpg重新命名為2.png,只需在命令提示符中輸入下面的命令,然後回車即可。注意,如果提示許可權不足,那麼你需要以管理員身份執行命令提示符。如果要批量修改字尾名,可借助萬用字元來實現。比如將d盤中的所有檔案字尾名改為jpg的命令為 re...