C++读取文件夹中所有文件的路径,包含子文件夹

标签: 读取所有文件的路径获取所有文件的路径获取指定路径的所有文件
430人阅读 评论(0) 收藏 举报
分类:

C++读取文件夹中所有文件的路径,包含子文件夹

    C++实现指定文件夹的路径,获取该路径下所有文件的路径,含子文件夹:
#include <iostream>
#include <vector>
#include <cstring>        // for strcat()
#include <io.h>
using namespace std;

vector<char*>  getFilesList(const char * dir);
int main()
{

	char dir[200];
	cout << "Enter a directory: ";
	cin.getline(dir, 200);
	vector<char*>allPath= getFilesList(dir);

	cout << "输出所有文件的路径:" << endl;
	for (size_t i = 0; i < allPath.size(); i++)
	{
		char *perPath = allPath.at(i);
		cout << perPath <<endl;
	}

	return 0;
}

vector<char*> getFilesList(const char * dir)
{
	vector<char*> allPath;
	char dirNew[200];
	strcpy(dirNew, dir);
	strcat(dirNew, "\\*.*");    // 在目录后面加上"\\*.*"进行第一次搜索

	intptr_t handle;
	_finddata_t findData;

	handle = _findfirst(dirNew, &findData);
	if (handle == -1) {// 检查是否成功
		cout << "can not found the file ... " << endl;
		return allPath;
	}      

	do
	{
		if (findData.attrib & _A_SUBDIR)//// 是否含有子目录
		{
			//若该子目录为"."或"..",则进行下一次循环,否则输出子目录名,并进入下一次搜索
			if (strcmp(findData.name, ".") == 0 || strcmp(findData.name, "..") == 0)
				continue;


			//cout << findData.name << "\t<dir>\n";
			// 在目录后面加上"\\"和搜索到的目录名进行下一次搜索
			strcpy(dirNew, dir);
			strcat(dirNew, "\\");
			strcat(dirNew, findData.name);
			vector<char*> tempPath=getFilesList(dirNew);
			allPath.insert(allPath.end(), tempPath.begin(), tempPath.end());
		}
		else //不是子目录,即是文件,则输出文件名和文件的大小
		{
			char *filePath=new char[200];
			strcpy(filePath, dir);
			strcat(filePath, "\\");
			strcat(filePath, findData.name);
			allPath.push_back(filePath);
			//cout << filePath << "\t" << findData.size << " bytes.\n";

		}
	} while (_findnext(handle, &findData) == 0);
	_findclose(handle);    // 关闭搜索句柄
	return allPath;
}
输入文件夹的路径,会返回该路径下所有文件的路径,包含所有子文件的文件路径,并保存在vector容器中:
单独获取全部的文件的名字
2017/09/21更新版
#include "stdafx.h"
#include <iostream>  
#include <vector>  
#include <cstring>        // for strcat()  
#include <io.h>  
using namespace std;

vector<char*>  getFilesNameList(const char * dir);
int main()
{

	char dir[200];
	char perFilePath[200];
	cout << "Enter a directory: ";
	cin.getline(dir, 200);
	vector<char*>allFileName = getFilesNameList(dir);

	cout << "输出所有文件的路径:" << endl;
	for (size_t i = 0; i < allFileName.size(); i++)
	{
		char *filename = allFileName.at(i);
		strcpy(perFilePath, dir);
		strcat(perFilePath, "\\");
		strcat(perFilePath, filename);
		cout << perFilePath << endl;
	}

	return 0;
}

vector<char*> getFilesNameList(const char * dir)
{
	vector<char*> allPath;
	char dirNew[200];
	strcpy(dirNew, dir);
	strcat(dirNew, "\\*.*");    // 在目录后面加上"\\*.*"进行第一次搜索  

	intptr_t handle;
	_finddata_t findData;

	handle = _findfirst(dirNew, &findData);
	if (handle == -1) {// 检查是否成功  
		cout << "can not found the file ... " << endl;
		return allPath;
	}

	do
	{
		if (findData.attrib & _A_SUBDIR)//// 是否含有子目录  
		{
			//若该子目录为"."或"..",则进行下一次循环,否则输出子目录名,并进入下一次搜索  
			if (strcmp(findData.name, ".") == 0 || strcmp(findData.name, "..") == 0)
				continue;


			//cout << findData.name << "\t<dir>\n";  
			// 在目录后面加上"\\"和搜索到的目录名进行下一次搜索  
			strcpy(dirNew, dir);
			strcat(dirNew, "\\");
			strcat(dirNew, findData.name);
			vector<char*> tempPath = getFilesNameList(dirNew);
			allPath.insert(allPath.end(), tempPath.begin(), tempPath.end());
		}
		else //不是子目录,即是文件,则输出文件名和文件的大小  
		{
			char *filePath = new char[200];
			//strcpy(filePath, dir);
			//strcat(filePath, "\\");
			//strcat(filePath, findData.name);
			sprintf(filePath, "%s", findData.name);
			allPath.push_back(filePath);
			//cout << filePath << "\t" << findData.size << " bytes.\n";  

		}
	} while (_findnext(handle, &findData) == 0);
	_findclose(handle);    // 关闭搜索句柄  
	return allPath;
}
2017/12/12更新版
#include "stdafx.h"          
#include "stdafx.h"  
#include <iostream>    
#include <vector>    
#include <cstring>        // for strcat()    
#include <io.h>    
using namespace std;

vector<char*>  getFilesNameList(const char * dir);
int main()
{

	char dir[200];
	string Path;
	cout << "Enter a directory: ";
	cin.getline(dir, 200);
	vector<char*>allFileName = getFilesNameList(dir);
	cout << "输出所有文件的路径:" << endl;
	for (size_t i = 0; i < allFileName.size(); i++)
	{
		char *filename = allFileName.at(i);
		Path = dir+(string)"\\"+ filename;
		cout << Path.c_str() << endl;
	}

	return 0;
}

vector<char*> getFilesNameList(const char * dir)
{
	vector<char*> allPath;
	char dirNew[200];
	strcpy_s(dirNew, dir);
	strcat_s(dirNew, "\\*.*");    // 在目录后面加上"\\*.*"进行第一次搜索    

	intptr_t handle;
	_finddata_t findData;

	handle = _findfirst(dirNew, &findData);
	if (handle == -1) {// 检查是否成功    
		cout << "can not found the file ... " << endl;
		return allPath;
	}

	do
	{
		if (findData.attrib & _A_SUBDIR)//// 是否含有子目录    
		{
			//若该子目录为"."或"..",则进行下一次循环,否则输出子目录名,并进入下一次搜索    
			if (strcmp(findData.name, ".") == 0 || strcmp(findData.name, "..") == 0)
				continue;


			//cout << findData.name << "\t<dir>\n";    
			// 在目录后面加上"\\"和搜索到的目录名进行下一次搜索    
			strcpy_s(dirNew, dir);
			strcat_s(dirNew, "\\");
			strcat_s(dirNew, findData.name);
			vector<char*> tempPath = getFilesNameList(dirNew);
			allPath.insert(allPath.end(), tempPath.begin(), tempPath.end());
		}
		else //不是子目录,即是文件,则输出文件名和文件的大小    
		{
			char *filePath = new char[200];
			//strcpy(filePath, dir);  
			//strcat(filePath, "\\");  
			//strcat(filePath, findData.name);  
			sprintf(filePath, "%s", findData.name);
			allPath.push_back(filePath);
			//cout << filePath << "\t" << findData.size << " bytes.\n";    

		}
	} while (_findnext(handle, &findData) == 0);
	_findclose(handle);    // 关闭搜索句柄    
	return allPath;
}


尊重原创,转载请注明出处http://blog.csdn.net/guyuealian/article/details/77981953


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:448576次
    • 积分:5086
    • 等级:
    • 排名:第6218名
    • 原创:104篇
    • 转载:50篇
    • 译文:1篇
    • 评论:139条
    博客专栏