C++フォルダの下にあるすべてのフォルダとファイルを遍歴する
4284 ワード
質問:
フォルダを指定し、フォルダの下にあるすべてのファイルを取得し、ファイルのパスを保存します.
解決方法:
再帰の思想を採用し、再帰の過程で各層を遍歴する.フォルダの場合は、下に移動します.ファイルの場合は、パスを保存します.
実装コード:
フォルダを指定し、フォルダの下にあるすべてのファイルを取得し、ファイルのパスを保存します.
解決方法:
再帰の思想を採用し、再帰の過程で各層を遍歴する.フォルダの場合は、下に移動します.ファイルの場合は、パスを保存します.
実装コード:
#include
#include
#include
#include
#include
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;
}