C++批量修改檔名字
阿新 • • 發佈:2019-01-28
為了實驗方便,需要為實驗資料檔案的名字新增一些標註。為了方便地新增或修改檔名標註,所以寫了這個程式。
實驗資料來自CMU Graphics Lav Motion Capture Database。
其中的檔名為:01_01.amc, 前兩位是兩個數字,代表這條運動資料的表演者。然後是下劃線。接著又是兩個數字,代表這個表演者表演的第幾個運動。檔案格式是amc。
由於一些原因,會導致檔名後邊會多出一些我們不想要的內容,我們要將這部分刪掉。同時,我們希望在這些檔名後邊加上一些標註,例如,將01_01.amc變為01_01_run.amc,方便我們直接從名字就能知道這條資料的內容。
思路是讀取一個資料夾,讀取下邊的檔案,讀取每一個檔案的名字,然後儲存進一個vector中。然後遍歷這個檔名vector,挨個修改名字。
#include <iostream> #include <string> #include <io.h> #include <stdlib.h> #include <vector> using namespace std; string dirpath = "E:\\gmmbayestb-v1.0\\motionData\\clusterData\\walk\\"; int main() { _finddata_t file; long lf; char suffixs[] = "*.amc"; //要尋找的檔案型別 vector<string> fileNameList; //資料夾下.amc型別檔案的名字向量 char *p; p = (char *)malloc((dirpath.size()+1)*sizeof(char)); strcpy(p, dirpath.c_str()); //獲取檔名向量 if ((lf = _findfirst(strcat(p, suffixs), &file)) ==-1l) { cout<<"檔案沒有找到!\n"; } else { cout<<"\n檔案列表:\n"; do { cout<<file.name<<endl; //str是用來儲存檔名的字串string string str(file.name); fileNameList.push_back(str); cout<<endl; }while(_findnext(lf, &file) == 0); } _findclose(lf); //遍歷檔名向量,並進行修改 string strAdd = "_walk.amc"; //在原檔名的基礎上要增加的部分 for (vector<string>::iterator iter = fileNameList.begin(); iter != fileNameList.end(); ++iter) { string oldName = dirpath+*iter; //str1為原檔名要保留的部分 string str1; str1 = (*iter).substr(0,5); string newName = dirpath+str1+strAdd; cout<<"oldName:"<<oldName<<endl; cout<<"newName"<<newName<<endl; cout<<"oldName size = "<<oldName.size()<<endl; cout<<"newName size = "<<newName.size()<<endl; char *oldNamePointer, *newNamePointer; oldNamePointer = (char *)malloc((oldName.size()+1) * sizeof(char)); newNamePointer = (char *)malloc((newName.size()+1) * sizeof(char)); strcpy(oldNamePointer, oldName.c_str()); strcpy(newNamePointer, newName.c_str()); cout<<oldNamePointer<<endl; cout<<newNamePointer<<endl; rename(oldNamePointer, newNamePointer); free(oldNamePointer); free(newNamePointer); } system("PAUSE"); return 0; }