C++自用函数留存

本文介绍了五个C++实用函数,包括遍历目标路径下所有子文件及文件,生成不重复的随机数,获取用户输入的数字和路径,以及创建文件夹。这些函数涵盖了文件操作、随机数生成和用户交互等常见场景。
摘要由CSDN通过智能技术生成
1. 遍历目标路径下的所有子文件及文件

函数定义:vector<SubfolderInfo> listFiles(const char * dir, bool flag = false);
函数功能:递归遍历指定目录下所有子文件夹,文件夹信息保存至结构体SubfolderInfo中,最终返回一个vector<SubfolderInfo>,其中包含指定目录下所有子目录的信息
传入参数:

  • const char* dir:目标路径
  • bool flag:是否清空函数中的static变量,第二次及以后调用时需为true

返回示例:
在这里插入图片描述

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

struct SubfolderInfo
{
   
	string folder_name;				//存放该子目录名称
	vector<string> file_names;		//存放该子目录下的文件名称
};

vector<SubfolderInfo> listFiles(const char * dir, bool flag = false)
{
   
	char dirNew[200];
	strcpy_s(dirNew, dir);
	strcat_s(dirNew, "\\*.*");    // 在目录后面加上"\\*.*"进行第一次搜索
	static vector<SubfolderInfo> sub_dirs;	//加static防止该变量被优化掉导致内存错误
	static size_t folder_counter = 0;
	if (flag)
	{
   
		sub_dirs.clear();
		folder_counter = 0;
	}
	intptr_t handle;
	_finddata_t findData;


	handle = _findfirst(dirNew, &findData);
	if (handle == -1)        // 检查是否成功
		return sub_dirs;

	do
	{
   
		SubfolderInfo subfolder;
		if (findData.attrib & _A_SUBDIR)	//子文件夹
		{
   
			if (strcmp(findData.name, ".") == 0 || strcmp(findData.name, "..") == 0)	//过滤.和..文件夹
				continue;

			//cout << findData.name << "\t<dir>\n";
			subfolder.folder_name = string(findData.name);
			folder_counter++;
			sub_dirs.push_back(subfolder);
			// 在目录后面加上"\\"和搜索到的目录名进行下一次搜索
			strcpy_s(dirNew, dir);
			strcat_s(dirNew, "\\");			//后加"\\"
			strcat_s(dirNew, findData.name);

			listFiles(dirNew);
		}
		else
		
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值