转载,转自http://www.oschina.net/code/snippet_119226_6095。
这个是windows版本。
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
using namespace std;
#include <windows.h>
#include <string>
#include <vector>
//file name max length
#define getFolderFile_max_length 1024
//dfs
bool dfsFolder(string rootPath, vector<string> &fileList)
{
WIN32_FIND_DATA findData;
HANDLE hError;
//构造路径
char nowPath[getFolderFile_max_length];
strcpy(nowPath, rootPath.c_str());
strcat(nowPath, "\\*.*");
//文件名
char fileName[getFolderFile_max_length];
hError = FindFirstFile(nowPath, &findData);
if (hError == INVALID_HANDLE_VALUE)
{
printf("搜索失败!");
return false;
}
while (::FindNextFile(hError, &findData))
{
//过虑.和..
if (strcmp(findData.cFileName, ".") == 0
||strcmp(findData.cFileName, "..") == 0)
continue;
//构造完整文件名
sprintf(fileName, "%s\\%s", rootPath.c_str(), findData.cFileName);
fileList.push_back(string(fileName));
//深度遍历递归,不是&&,可能是与操作
if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
//弹出文件夹
fileList.pop_back();
dfsFolder(string(fileName), fileList);
}
}
return true;
}
输入初始文件夹的时候,不要带最后的\\。