1. 程式人生 > >C++遍歷資料夾下的所有資料夾及檔案

C++遍歷資料夾下的所有資料夾及檔案

問題:

給定一個資料夾,獲取資料夾下的所有檔案,並將檔案的路徑進行儲存

解決方法:

採用遞迴的思想,在遞迴過程中對每一層進行遍歷。若為資料夾,繼續向下遍歷。若為檔案,將路徑儲存。

實現程式碼:

#include <iostream>
#include <fstream>
#include <io.h>
#include <string>
#include <vector>

using namespace std;


void getAllFiles( 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) { getAllFiles( p.assign(path).append("\\").append(fileinfo.name), files ); //如果是資料夾,繼續向下遍歷 } } else //是檔案 { files.push_back(p.assign(path).append("\\"
).append(fileinfo.name) ); //是檔案,將其路徑加入到files集合中 } }while(_findnext(hFile, &fileinfo) == 0); //尋找下一個,成功返回0,否則-1 _findclose(hFile); } } int main() { char * filePath = "file"; //所要查詢的資料夾 char * distAll = "path.txt"; //結果儲存 vector<string> files; //儲存檔案路徑資訊 ofstream ofn(distAll); //開啟檔案 int size = 0; //儲存檔案個數 while(!files.empty()) //清空vector { files.pop_back(); } getAllFiles(filePath, files); //遞迴查詢檔案以及資料夾。資料夾路徑為filePath size = files.size(); //包含檔案個數 cout << size << endl; for (int i = 0; i < size; i++) { ofn << files[i] << endl; //把檔案路徑儲存 } ofn.close(); //檔案關閉 return 0; }