遍歷某資料夾下所有檔案,並輸出儲存在txt
阿新 • • 發佈:2019-02-18
#include<iostream> #include "io.h" #include<fstream> using namespace std; ofstream MyFile("FileName.txt"); bool transfer(string fileName , int txtNum = 0) { _finddata_t fileInfo; long handle = _findfirst(fileName.c_str(), &fileInfo); if (handle == -1L) { cerr<< "failed to transfer files" <<endl; return false; } do { txtNum ++; MyFile<< fileInfo.name <<endl; } while (_findnext(handle, &fileInfo) == 0); cout<< " .txt files' number: " << txtNum <<endl;; return true; } void main() { //ofstream MyFile(FileName.txt); string FilePath="C:\\Users\\Administrator\\Desktop\\HOG+SVM\\資料集\\INRIAPerson\\INRIAPerson\\INRIAPerson\\96X160H96\\Train\\pos\\*.png";//注意萬用字元* ? 的用法,這個就是尋找XXX.png的檔案,不管有多少個XXX, 如果是?.png,就是一個X,即X.png int num=0; transfer(FilePath,num); }
我是為了執行hog+svm需要樣本,下載了資料庫,一個資料夾下全是.png的圖片,需把每張圖片名儲存在txt供程式讀取
另外這個帖子不錯,有空看看 用類寫的 http://blog.csdn.net/abcjennifer/article/details/18147551
我是參考這個帖子的:http://www.cnblogs.com/summerRQ/articles/2375749.html
2. 遍歷資料夾及其子資料夾下所有檔案。作業系統中資料夾目錄是樹狀結構,使用深度搜索策略遍歷所有檔案。用到_A_SUBDIR屬性,可執行程式如下:
void dfsFolder(string folderPath, ofstream &fout) { _finddata_t FileInfo; string strfind = folderPath + "\\*"; long Handle = _findfirst(strfind.c_str(), &FileInfo); if (Handle == -1L) { cerr << "can not match the folder path" << endl; exit(-1); } do{ //判斷是否有子目錄 if (FileInfo.attrib & _A_SUBDIR) { //這個語句很重要 if( (strcmp(FileInfo.name,".") != 0 ) &&(strcmp(FileInfo.name,"..") != 0)) { string newPath = folderPath + "\\" + FileInfo.name; dfsFolder(newPath, fout); } } else { fout << folderPath << "\\" << FileInfo.name << " "; } }while (_findnext(Handle, &FileInfo) == 0); _findclose(Handle); fout.close(); }
在判斷有無子目錄的if分支中,由於系統在進入一個子目錄時,匹配到的頭兩個檔案(夾)是"."(當前目錄),".."(上一層目錄)。需要忽略掉這兩種情況。當需要對遍歷到的檔案做處理時,在else分支中新增相應的程式碼就好
PS:突然在網上看到一個絕技!
在許多樣本的那個目錄下新建一個文字txt,在其中輸入如下:
dir /b/s/p/w *.png>train_list.txt
@pause
儲存,改為.bat檔案執行,就直接可以生成一個train_list.txt,裡面包含目錄
新增:
參見:http://blog.csdn.net/hei_ya/article/details/51387624方法二: 利用Directory類實現資料夾中特定格式影象的遍歷,Directory的標頭檔案是windows.h。 #include<opencv2/opencv.hpp> #include<iostream> #include<vector> #include<string> #include <windows.h> using namespace std; using namespace cv; void main() { Directory dir; string path1 = "C:\\Users\\Administrator\\Desktop\\date\\MIT\\MIT人臉庫\\faces"; string exten1 = "*.bmp"; vector<string> filenames = dir.GetListFiles(path1, exten1, false); int size = filenames.size(); for (int i = 0; i < size;i++) { cout << filenames[i] << endl; } }