代碼簡潔,親測可用。
1,首先來獲取(輸出)一個文件夾中所有的文件名
void getFiles(string path, vector<string>& files) { //文件句柄 long hFile = 0; //文件信息 struct _finddata_t fileinfo; string p; if ((hFile = _findfirst(p.assign(path).append("\\*").c_str(), &fileinfo)) != -1) { do { //如果是目錄,迭代之 //如果不是,加入列表 if ((fileinfo.attrib & _A_SUBDIR)) { if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0) getFiles(p.assign(path).append("\\").append(fileinfo.name), files); } else { files.push_back(p.assign(path).append("\\").append(fileinfo.name)); } } while (_findnext(hFile, &fileinfo) == 0); _findclose(hFile); } } void main() { InitConsoleWindow1(); char * filePath = "E:/gait/004"; vector<string> files; getFiles(filePath, files); char str[30]; int size = files.size(); for (int i = 0; i < size; i++) { cout << files[i].c_str() << endl; } }
因為當時寫的是個mfc框架,Initconsolewindow1()是為了能在mfc運行時輸出控制台信息
void InitConsoleWindow1() { int nCrt = 0; FILE* fp; AllocConsole(); nCrt = _open_osfhandle((long)GetStdHandle(STD_OUTPUT_HANDLE), _O_TEXT); fp = _fdopen(nCrt, "w"); *stdout = *fp; setvbuf(stdout, NULL, _IONBF, 0); }
2,然后替換(修改)其中的某些字符
#include<string> #include<iostream> using namespace std; //第一種替換字符串的方法用replace() void string_replace(string&s1,const string&s2,const string&s3) { string::size_type pos=0; string::size_type a=s2.size(); string::size_type b=s3.size(); while((pos=s1.find(s2,pos))!=string::npos) { s1.replace(pos,a,s3); pos+=b; } } //第二種替換字符串的方法用erase()和insert() void string_replace_2(string&s1,const string&s2,const string&s3) { string::size_type pos=0; string::size_type a=s2.size(); string::size_type b=s3.size(); while((pos=s1.find(s2,pos))!=string::npos) { s1.erase(pos,a); s1.insert(pos,s3); pos+=b; } }
3,利用c++改變文件夾內文件的名字,使之變成你修改后的。
rename(oldfilename,newfilename);
oldfilename是char*型,c的這個函數真是很好使啊。
值得注意的是:
1,替換函數,while中的順序在!=前面是個整體,一開始漏掉那個括號導致沒有跳出循環
2,替換函數,整體基本都要在讀取文件的while函數中,除了個別不會改變的變量,如a,b的值。之前把string::size_type pos = 0;放在讀取文件的while函數外面導致只修改了一個文件的名字。
就醬~
