【VC++】列举当前及子文件夹文件

#define LINE_TAG _T("\r\n")

int g_iLevel = -1;	

//0: file 1:folder
CString GetToken(int iFlag)
{
	CString strToken;
	for(int i = 0; i < g_iLevel; i++)
	{
		strToken += _T("   ");
	}

	if(iFlag == 0)
	{
		strToken += _T("|");
	}

	return strToken;
}

CString EnumFiles()
{
	g_iLevel++;

	WIN32_FIND_DATA fd;
	HANDLE handle = ::FindFirstFile(_T("*.*"), &fd);

	CString strFolders, strFiles;
	strFiles.Empty();
	strFolders.Empty();
	if(INVALID_HANDLE_VALUE != handle)
	{
		do{
				CString strFolder, strFile;
				strFile.Empty();
				strFolder.Empty();
				if(fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
				{
					CString strName = fd.cFileName;
					if(strName != _T(".") && strName != _T(".."))
					{//文件夹
						strFolder = GetToken(1);
						strFolder += _T("+ ");
						strFolder += strName + LINE_TAG;
						::SetCurrentDirectory(strName);
						strFolder += EnumFiles();
						::SetCurrentDirectory(_T(".."));
					}
				}
				else
				{//文件
					strFile = GetToken(0);
					strFile += fd.cFileName;
					strFile += LINE_TAG;
				}
			
				strFiles += strFile;
				strFolders += strFolder;
		}while(FindNextFile(handle, &fd));

		::FindClose(handle);
	}

	g_iLevel--;

	return CString(strFiles + strFolders);
}


效果图:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值