C++遍歷資料夾下的所有資料夾及檔案
阿新 • • 發佈:2019-01-28
問題:
給定一個資料夾,獲取資料夾下的所有檔案,並將檔案的路徑進行儲存
解決方法:
採用遞迴的思想,在遞迴過程中對每一層進行遍歷。若為資料夾,繼續向下遍歷。若為檔案,將路徑儲存。
實現程式碼:
#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;
}