输入
运行结果
main.cpp
#include "Fing_path.h" int main() { Find_path Get_imgpath ; //1获取所有的文件名字 // Get_imgpath.GetAllFiles(filePath, files); //2获取特定文件名字 Get_imgpath.GetAllFormatFiles(Get_imgpath.filePath, Get_imgpath.files, Get_imgpath.format); //3保存txt Get_imgpath.Save_txt(Get_imgpath.Txt_path, Get_imgpath.files); return 0; }
Fing_path.h
#pragma once #ifndef _FINDPATH_H_ #define _FINDPATH_H_ //1#ifndef...#endif 使得编译器可以根据这个名字是否被定义,再决定要不要继续编译该头文中后续的内容 //2避免头文件添加函数定义和变量声明 #include <io.h> #include <fstream> #include <string> #include <vector> #include <iostream> using namespace std; class Find_path { public: //默认路径 string filePath; //默认保存的txt路径 string Txt_path ; //默认读取的文件类型 string format ; //初始化函数 Find_path(); //保存获取的文件名列表 std::vector<std::string> files; //1获取所有文件名字 void GetAllFiles(std::string path, std::vector<std::string>& files); //2获取指定类型文件名字 void GetAllFormatFiles(std::string path, std::vector<std::string>& files, std::string format); //3保存成txt void Save_txt(std::string Txt_path, std::vector<std::string>& files); }; #endif // !Fing_path.cpp
Fing_path.cpp
#include "Fing_path.h" /* 功能:初始化 输入: 无 输出: 无 */ Find_path::Find_path() { } /* 功能:获取所有的文件名 输入: string path, 要搜索的文件夹名字 vector<string>& files, 用来保存获取的文件列表 输出: 无 */ void Find_path::GetAllFiles(string path, vector<string>& files) { intptr_t hFile = 0; //文件信息 struct _finddata_t fileinfo;//用来存储文件信息的结构体 string p; if ((hFile = _findfirst(p.assign(path).append("//*").c_str(), &fileinfo)) != -1) //第一次查找 { do { if ((fileinfo.attrib & _A_SUBDIR)) //如果查找到的是文件夹 { if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0) //进入文件夹查找 { files.push_back(p.assign(path).append("//").append(fileinfo.name)); GetAllFiles(p.assign(path).append("//").append(fileinfo.name), files); } } else //如果查找到的不是是文件夹 { files.push_back(p.assign(fileinfo.name)); //将文件路径保存,也可以只保存文件名: p.assign(path).append("\").append(fileinfo.name) } } while (_findnext(hFile, &fileinfo) == 0); _findclose(hFile); //结束查找 } } /* 功能:获取特定格式的文件名 输入: string path, 要搜索的文件夹名字 vector<string>& files, 用来保存获取的文件列表 string format 要找的特定类型文件 默认 bmp 输出: 无 */ void Find_path::GetAllFormatFiles(string path, vector<string>& files, string format) { //文件句柄 intptr_t hFile = 0; //文件信息 struct _finddata_t fileinfo; string p; if ((hFile = _findfirst(p.assign(path).append("//*" + format).c_str(), &fileinfo)) != -1) { do { if ((fileinfo.attrib & _A_SUBDIR)) { if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0) { //files.push_back(p.assign(path).append("").append(fileinfo.name) ); GetAllFormatFiles(p.assign(path).append("//").append(fileinfo.name), files, format); } } else { files.push_back(p.assign(fileinfo.name)); //将文件路径保存,也可以只保存文件名: p.assign(path).append("\").append(fileinfo.name) } } while (_findnext(hFile, &fileinfo) == 0); _findclose(hFile); } } /* 功能:将文件名字列表保存在TXT文件 输入: string Txt_path 要保存的TXT文件名字 vector<string>& files 已经获取的文件列表 输出: 无 */ void Find_path::Save_txt(string Txt_path, vector<string>& files) { //3保存结果 ofstream ofn(Txt_path);//打开TXT int size = files.size();//获取大小 ofn << size << endl;//保存 for (int i = 0; i<size; i++) { ofn << files[i] << endl; // 写入文件 cout << files[i] << endl;//输出到屏幕 } ofn.close(); }