// 查找当前目录下的所有目录(不包括当前目录)
void FindAllDir(const char* pCurDir, vector
// 查找当前目录下的所有文件(不包括子目录),制定查找文件类型,如:*.txt,*.lua,*.*
void FindAllFile(const char* pCurDir, const char* pFileType, vector
// 查找当前目录下的所有文件(包括子目录),制定查找文件类型,如:*.txt,*.lua,*.*
void FindAllFileE(const char* pCurDir, const char* pFileType, vector
通过FindAllFileE这个函数可以获取当前目录下和子目录下的所有lua文件,函数调用方法为:
// lua目录
char szLuaPath[MAX_PATH] = {0};
_snprintf(szLuaPath, MAX_PATH, "%s\\lua\\", GetRootPath());
vector luaFiles;
CFileAndDirFinder cFileAndDirFinder;
cFileAndDirFinder.FindAllFileE(szLuaPath, "*.lua", luaFiles);
// 遍历所有lua文件并通过lua_tinker进行加载。
vector::iterator itLuaFile = luaFiles.begin();
for (; itLuaFile!=luaFiles.end(); ++itLuaFile)
{
lua_tinker::dofile(gL, itLuaFile->c_str());
}
return true;
/* 函数使用案例:
vector
CFileAndDirFinder cFileAndDirFinder;
//cFileAndDirFinder.FindAllDir(GetRootPath(), luaFiles);
//cFileAndDirFinder.FindAllFile(GetRootPath(), "*.txt", luaFiles);
cFileAndDirFinder.FindAllFileE(GetRootPath(), "*.txt", luaFiles);
vector
for (; it!=luaFiles.end(); ++it)
{
cout << it->c_str() << endl;
}
*/
#pragma once
class CFileAndDirFinder
{
public:
CFileAndDirFinder(void);
~CFileAndDirFinder(void);
// 查找当前目录下的所有目录(不包括当前目录)
void FindAllDir(const char* pCurDir, vector& vtDirs);
// 查找当前目录下的所有文件(不包括子目录),制定查找文件类型,如:*.txt,*.lua,*.*
void FindAllFile(const char* pCurDir, const char* pFileType, vector& vtFiles);
// 查找当前目录下的所有文件(包括子目录),制定查找文件类型,如:*.txt,*.lua,*.*
void FindAllFileE(const char* pCurDir, const char* pFileType, vector& vtFiles);
};
/* 函数使用案例:
vector luaFiles;
//GetLuaFileList(GetRootPath(), luaFiles);
CFileAndDirFinder cFileAndDirFinder;
//cFileAndDirFinder.FindAllDir(GetRootPath(), luaFiles);
//cFileAndDirFinder.FindAllFile(GetRootPath(), "*.txt", luaFiles);
cFileAndDirFinder.FindAllFileE(GetRootPath(), "*.txt", luaFiles);
vector::iterator it = luaFiles.begin();
for (; it!=luaFiles.end(); ++it)
{
cout << it->c_str() << endl;
}
*/
#include "StdAfx.h"
#include "FileAndDirFinder.h"
CFileAndDirFinder::CFileAndDirFinder(void)
{
}
CFileAndDirFinder::~CFileAndDirFinder(void)
{
}
void CFileAndDirFinder::FindAllDir( const char* pCurDir, vector& vtDirs )
{
// 当前目录
char szDir[MAX_PATH] = {0};
_snprintf(szDir, MAX_PATH, "%s\\*.*", pCurDir);
WIN32_FIND_DATA findFileData = {0};
HANDLE hFind = FindFirstFile((LPCSTR)szDir, &findFileData);
if (INVALID_HANDLE_VALUE == hFind)
{
return ;
}
do
{
/* 返回的文件名中会包含"."和".."。“.'代表本目录,".."代表上一层目录。
一般情况下需要把这两个名称过滤掉。比如要进行文件删除操作
*/
if (findFileData.cFileName[0] != '.') //不是当前路径或者父目录的快捷方式
{
if(findFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
// 这是一个普通目录
char tmpDir[MAX_PATH] = {0};
_snprintf(tmpDir, MAX_PATH, "%s\\%s", pCurDir, findFileData.cFileName);
vtDirs.push_back(tmpDir);
// 递归调用查找子目录
FindAllDir(tmpDir, vtDirs);
}
}
}while (FindNextFile(hFind, &findFileData));
FindClose(hFind);
hFind = INVALID_HANDLE_VALUE;
}
void CFileAndDirFinder::FindAllFile( const char* pCurDir, const char* pFileType, vector& vtFiles )
{
// 当前目录
char szDir[MAX_PATH] = {0};
_snprintf(szDir, MAX_PATH, "%s\\%s", pCurDir, pFileType);
WIN32_FIND_DATA findFileData = {0};
HANDLE hFind = FindFirstFile((LPCSTR)szDir, &findFileData);
if (INVALID_HANDLE_VALUE == hFind)
{
return ;
}
do
{
/* 返回的文件名中会包含"."和".."。“.'代表本目录,".."代表上一层目录。
一般情况下需要把这两个名称过滤掉。比如要进行文件删除操作
*/
if (findFileData.cFileName[0] != '.') //不是当前路径或者父目录的快捷方式
{
// 这是一个文件
char tmpFile[MAX_PATH] = {0};
_snprintf(tmpFile, sizeof(tmpFile)-1, "%s\\%s", pCurDir, findFileData.cFileName);
vtFiles.push_back(tmpFile);
}
}while (FindNextFile(hFind, &findFileData));
FindClose(hFind);
hFind = INVALID_HANDLE_VALUE;
}
void CFileAndDirFinder::FindAllFileE( const char* pCurDir, const char* pFileType, vector& vtFiles )
{
// 获取子目录
vector vtDirs;
FindAllDir(pCurDir, vtDirs);
// 加入当前目录
vtDirs.push_back(pCurDir);
vector::iterator itDir = vtDirs.begin();
for (; itDir!=vtDirs.end(); ++itDir)
{
FindAllFile(itDir->c_str(), pFileType, vtFiles);
}
}
源代码下载地址:FileAndDirFinder.rar