#include <windows.h>
#include <vector>
#include <string>
using namespace std;
// 枚举指定目录(包括其中的所有子目录)中的所有文件
int RecursiveEnumFile(const char* szDir, vector<string>& vFileNameList)
{
char szQuestContext[MAX_PATH];
strcpy(szQuestContext, szDir);
strcat(szQuestContext, "\\*.*");
WIN32_FIND_DATA cWin32FindData;
HANDLE hHandle = FindFirstFile(szQuestContext, &cWin32FindData);
if ( hHandle != INVALID_HANDLE_VALUE )
{
do
{
if ( 0 != strcmp(cWin32FindData.cFileName, ".") && 0 != strcmp(cWin32FindData.cFileName, "..") )
{
if ( (cWin32FindData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY) != 0 )
{
char szNextLevelDir[MAX_PATH];
strcpy(szNextLevelDir, szDir);
strcat(szNextLevelDir, "\\");
strcat(szNextLevelDir, cWin32FindData.cFileName);
RecursiveEnumFile(szNextLevelDir, vFileNameList);
}
else
{
char szFullFileName[MAX_PATH];
strcpy(szFullFileName, szDir);
strcat(szFullFileName, "\\");
strcat(szFullFileName, cWin32FindData.cFileName);
vFileNameList.push_back(szFullFileName);
}
}
} while ( FindNextFile(hHandle, &cWin32FindData) );
FindClose(hHandle);
return 0;
}
else
{
return -1;
}
}
// 读取文本文件中的每一行的内容(注:该文本文件的最后应该加上一个回车换行符)
int ReadFileLine(const char* szFileName, vector<string>& vFileLine)
{
const int MAX_LINE_LEN = 512; // 单行所允许的最大长度
char szLineBuf[MAX_LINE_LEN];
FILE *fp = fopen(szFileName, "rb");
if ( fp )
{
while ( NULL != fgets(szLineBuf, sizeof(szLineBuf), fp) )
{
szLineBuf[strlen(szLineBuf)-2] = '\0'; // 去掉szLineBuf最后的“\r\n”
vFileLine.push_back(szLineBuf);
}
fclose(fp);
return 0;
}
else
{
return -1;
}
}
// demo
int main(void)
{
vector<string> vFileLine;
if ( 0 == ReadFileLine(".\\test.txt", vFileLine) )
{
for ( int i=0; i<(int)vFileLine.size(); ++i )
{
printf("[%s]\n", vFileLine[i].c_str());
}
printf("count:[%d]\n", vFileLine.size());
}
printf("=====================================================\n");
vector<string> vFileNameList;
if ( 0 == RecursiveEnumFile(".\\test", vFileNameList) )
{
for ( int i=0; i<(int)vFileNameList.size(); ++i )
{
printf("[%s]\n", vFileNameList[i].c_str());
}
printf("count:[%d]\n", vFileNameList.size());
}
getchar();
return 0;
}