返回首页
当前位置: 主页 > 编程语言 > C/C++教程 >

C++递归调用遍历目录树实现代码

时间:2015-06-29 09:51来源:电脑教程学习网 www.etwiki.cn 编辑:admin

#include

#include

/* 预处理申明 */

//#pragma comment (lib, "User32.lib")

/* 函数申明 */

DWORD ListAllFileInDrectory(LPSTR szPath);


/* 全局变量 */

//记录所有的文件和目录数

DWORD dwTotalFileNum = 0;


/* ************************************

* DWORD ListAllFileInDrectory(LPSTR szPath)

* 功能 遍历目录及所有子目录,打印路径

*

* 参数 LPTSTR szPath,为需遍历的目录

*

* 返回值 0代表执行完成,1代码发生错误

**************************************/

DWORD ListAllFileInDrectory(LPSTR szPath)

{

CHAR szFilePath[MAX_PATH];


WIN32_FIND_DATA FindFileData;

HANDLE hListFile;

CHAR szFullPath[MAX_PATH];


//构造代表子目录和文件夹路径的字符串,使用通配符“*”

lstrcpy(szFilePath, szPath);

lstrcat(szFilePath, "\\*");

//查找第一个文件/目录,获得查找句柄

hListFile = FindFirstFile(szFilePath,&FindFileData);


if(hListFile==INVALID_HANDLE_VALUE)

{

printf("错误:%d",GetLastError());

return 1;

}

else

{

do

{

// 过滤“.”和“..”,不需要遍历

if(lstrcmp(FindFileData.cFileName,TEXT("."))==0||

lstrcmp(FindFileData.cFileName,TEXT(".."))==0)

{

continue;

}

//构造成全路径

wsprintf(szFullPath,"%s\\%s",

szPath,FindFileData.cFileName);

dwTotalFileNum++;

//打印

printf("\n%d\t%s\t",dwTotalFileNum,szFullPath);


//如果是目录,则递归调用,列举下级目录

if(FindFileData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)

{

printf("

");

ListAllFileInDrectory(szFullPath);

}

}

while(FindNextFile(hListFile, &FindFileData));

}

return 0;

}


/* ************************************

* int main(int argc, PCHAR argv[])

* 功能 调用ListAllFileInDrectory

* 遍历目录下的文件和子目录

*

* 参数 argv[1]为需遍历的路径,如果为空则获取

* 当前路径

*

*

**************************************/

int main(int argc, PCHAR argv[])

{

if(argc == 2)

{

ListAllFileInDrectory(argv[1]);

}

else

{

CHAR szCurrentPath[MAX_PATH];

GetCurrentDirectory(MAX_PATH,szCurrentPath);

ListAllFileInDrectory(szCurrentPath);

}

 

printf("%d",MAX_PATH);

return 0;

}
 

------分隔线----------------------------
标签(Tag):C语言
------分隔线----------------------------
推荐内容
猜你感兴趣