用API实现遍历文件目录(续)

在上一篇文章中。通过用递归的方法实现了遍历文件目录。递归虽然看起来清晰,代码也少。但是觉得太难理解了。特别是对于俺这种菜鸟。所以通过找资料,重新修改了代码。非递归的方式来实现遍历文件目录。代码如下。(该代码在Vc6.0下测试通过)

void FindFile(LPTSTR strPath, LPTSTR strFile)
{
	TCHAR strRoot[MAX_PATH];
	TCHAR strSearchFile[MAX_PATH];
	TCHAR strOut[MAX_PATH];
	WIN32_FIND_DATA fData;
	LPTSTR strTemp[MAX_PATH];
	int iCount = 0;

	ZeroMemory(strOut, sizeof(strOut));
	ZeroMemory(&fData, sizeof(WIN32_FIND_DATA));
	
	dirQueue.push(strPath);
	
	while(!dirQueue.empty())
	{
		lstrcpy(strRoot, dirQueue.front());
		lstrcpy(strSearchFile, dirQueue.front());
		lstrcat(strSearchFile, _T("*.*"));
		dirQueue.pop();

		HANDLE hFile = FindFirstFile(strSearchFile, &fData);
		do
		{
			if(fData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY
				&& lstrcmp(fData.cFileName, _T("."))
				&& lstrcmp(fData.cFileName, _T("..")))
			{
				strTemp[iCount] = new TCHAR[MAX_PATH]; //这个地方要注意,不能用同一个内存块重复用,否则.....
                                lstrcpy(strTemp[iCount], strRoot);
				lstrcat(strTemp[iCount], fData.cFileName);
				lstrcat(strTemp[iCount], _T("\\"));

				dirQueue.push(strTemp[iCount]);
				iCount++;

				continue;
			}
			
			if(lstrcmp(fData.cFileName, _T("."))
			&& lstrcmp(fData.cFileName, _T("..")))
			{
				lstrcpy(strOut, strRoot);
				lstrcat(strOut, fData.cFileName);
				ListBox_AddString(m_hWnd, strOut);
				ZeroMemory(strOut, sizeof(strOut));
			}

		}while(FindNextFile(hFile, &fData) != 0);
	}
	
	for(int i = 0; i < iCount; i++)
		delete [] strTemp[i];
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值