C/C++代码:递归遍历当前文件夹下的文件和子文件夹

#include <iostream>
#include <io.h>
#include <string>
using namespace std;

void listFiles(const char * dir,int tab);

int main()
{
	string dir;
	cout << "Enter a directory (ends with \'\\\'): ";
	cin>>dir;
	dir += "*.*";    // 在要遍历的目录后加上通配符
	listFiles(dir.c_str(),0);
	cout << "Done!\n";
	system("pause");
	return 0;
}

void listFiles(const char * dir,int tab)
{
	intptr_t handle;
	_finddata_t findData;

	handle = _findfirst(dir, &findData);    // 查找目录中的第一个文件
	if (handle == -1)
	{
		cout << "Failed to find first file!\n";
		return;
	}

	do
	{
		if (findData.attrib & _A_SUBDIR
			&& !(strcmp(findData.name, ".") == 0
			|| strcmp(findData.name, "..") == 0
			)){    // 是否是子目录并且不为"."或".."
			cout << findData.name << "\t<dir>\n";
			string subdir(dir);
			subdir.insert(subdir.find("*"), string(findData.name)+"\\");
			cout << subdir << endl;
			listFiles(subdir.c_str(),tab+1);//递归遍历子文件夹
		}
		else {
			for (int i = 0; i < tab; ++i)
				cout << "-";
			cout << findData.name << "\t" << findData.size << endl;
		}
	} while (_findnext(handle, &findData) == 0);    // 查找目录中的下一个文件
	system("pause");
	_findclose(handle);    // 关闭搜索句柄
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值