这几天在弄一个项目,需要读取给定路径下的所有文件夹名称或所有带后缀的文件名。查了下C++的资料,发现有很多方法,这里总结其中的一种,其他用法类似。主要用到了以下几个头文件(类):io.h,fstream,string。

1、读取某给定路径下所有文件夹与文件名称,并带完整路径。代码如下:

 void getAllFiles(string path, vector<string>& files) {
//文件句柄
long hFile = ;
//文件信息
struct _finddata_t fileinfo; //很少用的文件信息读取结构
string p; //string类很有意思的一个赋值函数:assign(),有很多重载版本
if ((hFile = _findfirst(p.assign(path).append("\\*").c_str(),&fileinfo)) != -) {
do {
if ((fileinfo.attrib & _A_SUBDIR)) { //比较文件类型是否是文件夹
if (strcmp(fileinfo.name,".") != && strcmp(fileinfo.name,"..") != ) {
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(path).append("\\").append(fileinfo.name));
}
} while (_findnext(hFile, &fileinfo) == ); //寻找下一个,成功返回0,否则-1
_findclose(hFile);
}
}

该函数有两个参数,第一个为路径字符串(string类型,最好为绝对路径);第二个参数为文件夹与文件名称存储变量(vector类型,引用传递)。在主函数中调用格式(并将结果保存在文件"AllFiles.txt"中,第一行为总数):

 char* filePath = "E:\\YunShi";
vector<string> files;
char* distAll = "AllFiles.txt";
getAllFiles(filePath, files);
ofstream ofn(distAll);
int size = files.size();
ofn<<size<<endl;
for (int i = ; i < size; i++) {
ofn<<files[i]<<endl;
}
ofn.close();

结果如下图:

同理,只读取某给定路径下的当前文件夹名(以下类似,只给出函数,调用案例同上):

 void getJustCurrentDir(string path, vector<string>& files) {
//文件句柄
long hFile = ;
//文件信息
struct _finddata_t fileinfo;
string p;
if ((hFile = _findfirst(p.assign(path).append("\\*").c_str(),&fileinfo)) != -) {
do {
if ((fileinfo.attrib & _A_SUBDIR)) {
if (strcmp(fileinfo.name, ".") != && strcmp(fileinfo.name, "..") != ) {
files.push_back(fileinfo.name);
//files.push_back(p.assign(path).append("\\").append(fileinfo.name));
}
}
} while (_findnext(hFile, &fileinfo) == );
_findclose(hFile);
}
}

只读取某给定路径下的当前文件名:

 void getJustCurrentFile(string path, vector<string>& files) {
//文件句柄
long hFile = ;
//文件信息
struct _finddata_t fileinfo;
string p;
if ((hFile = _findfirst(p.assign(path).append("\\*").c_str(), &fileinfo)) != -) {
do {
if ((fileinfo.attrib & _A_SUBDIR)) {
;
} else {
files.push_back(fileinfo.name);
//files.push_back(p.assign(path).append("\\").append(fileinfo.name));
}
} while (_findnext(hFile, &fileinfo) == );
_findclose(hFile);
}
}

只读取某给定路径下的所有文件名(即包含当前目录及子目录的文件):

 void getFilesAll(string path, vector<string>& files) {
//文件句柄
long hFile = ;
//文件信息
struct _finddata_t fileinfo;
string p;
if ((hFile = _findfirst(p.assign(path).append("\\*").c_str(), &fileinfo)) != -) {
do {
if ((fileinfo.attrib & _A_SUBDIR)) {
if (strcmp(fileinfo.name,".") != && strcmp(fileinfo.name,"..") != ) {
//files.push_back(p.assign(path).append("\\").append(fileinfo.name));
getFilesAll(p.assign(path).append("\\").append(fileinfo.name), files);
}
} else {
files.push_back(p.assign(path).append("\\").append(fileinfo.name));
}
} while (_findnext(hFile, &fileinfo) == );
_findclose(hFile);
}
}

至此,简单的读取功能就实现了,以后只要指定路径,就能轻松地得到对应的路径与文件名称。

C++读取特定路径下文件目录及文件名称的更多相关文章

  1. 转载:C++读取特定路径下文件目录及文件名称

    转载地址:http://www.cnblogs.com/tgyf/p/3839894.html void getAllFiles( string path, vector<string>& ...

  2. java通过文件路径读取该路径下的所有文件并将其放入list中

    java通过文件路径读取该路径下的所有文件并将其放入list中   java中可以通过递归的方式获取指定路径下的所有文件并将其放入List集合中.假设指定路径为path,目标集合为fileList,遍 ...

  3. unity3d 依据指定的Assets下的目录路径 返回这个路径下的全部文件名称

    using UnityEngine; using System.Collections; using System.Collections.Generic; using System.IO; < ...

  4. 封装的方法--读取任何路径下的properties文件中的值

    概述:我们在做项目时,经常需要从某个properties文件中读取properties文件中的值.现在我封装了一下方法,直接读取配置文件中的值. 代码如下所示: /** * Created by qi ...

  5. java读取项目路径下的中文文件乱码问题

    出现乱码错误: 处理方案: 对文件路径中存在中文的,都要进行URLDecoder.decode(path,"UTF-8")编码转换 wordContent = URLEncoder ...

  6. [转]读取assets目录下的数据库文件

    在做Android应用的时候,不可避免要用到数据库.但是当我们把应用的apk部署到真机上的时候,已经创建好的数据库及其里边的数据是不能随着apk一起安装到真机上的. (PS:这篇博客解决了我前面博客中 ...

  7. 读取web应用下的资源文件(例如properties)

    package gz.itcast.b_resource; import java.io.IOException; import java.io.InputStream; import java.ut ...

  8. matlab读取指定路径下的图像

    利用matlab读取指定路径下的图像 %% 读入指定路径imgFolder下的图像imgName imgFolder = 'F:\博\快盘\图像+数据\images\文章实验图'; %指定路径 img ...

  9. python之实现循环查看指定路径下的所有文件---os.walk

    循环查看指定路径下的所有文件.文件夹,包含隐藏文件注:“.filename” 以点开头的是隐藏文件 import os for cur_path,cur_dirs,cur_files in os.wa ...

随机推荐

  1. puppet学习笔记(一)

    之前搞了一个月zabbix,基本上是能熟练使用了,不过在后来部署的时候发现这玩意在部署的时候机子少还行,机子多了手动安装手会残的.第一反应是用puppet,后来师父直接用puppet搞定了.索性自己也 ...

  2. Hadoop Resource

    http://www.aiopass4sure.com/cloudera-exams/ccd-410-exam-questions/which-process-describes-the-lifecy ...

  3. ubuntu apache2服务器配置

    把django开发好的项目部署到apache2服务器. 记录我的配置过程. apache,django,mod_wsgi,python版本如下.不同版本大同小异. ii apache2 2.2.22- ...

  4. 观nginx与lvs负载均衡的较量

    在技术工作者中,常用到的就是lvs负载均衡和Nginx负载均衡了.这两者也是比较普及的.那么,根据不同的需求,两者存在着不同的优势.具体选择哪一个,还要看您的要求了.那么我们在此为大家分享一篇文章,对 ...

  5. dipole antenna simulation by FEKO

    新建变量 建立模型 设置频率 馈电设置为wire port ,Edge 选中振子,从中心馈电. 设置输入信号 Mesh. run solver.在post feko中查看相关结果

  6. 2016.6.12 codevs搜索练习

    1.codevs 3143 二叉树的序遍历 /*只要把输出根节点的位置调换一下就可以了*/ #include<iostream> using namespace std; #include ...

  7. vim支持lua

    1. ncurses 安装 官网下载:http://ftp.gnu.org/pub/gnu/ncurses/ncurses-5.9.tar.gz CSDN 下载:http://download.csd ...

  8. 八皇后,回溯与递归(Python实现)

    八皇后问题是十九世纪著名的数学家高斯1850年提出 .以下为python语句的八皇后代码,摘自<Python基础教程>,代码相对于其他语言,来得短小且一次性可以打印出92种结果.同时可以扩 ...

  9. Daikon Forge GUI 制作图集和字体集

    Daikon Forge GUI 制作UI面板 在上次的学习中制作了一个简单的面板,下面来学习制作图集以及字体. 1.DF-GUI 图集(Atlas)制作 操作步骤 选中UI Root根节点,在Sce ...

  10. [3D跑酷] MissionManager

    前言 许久没有更新日志了,之前写了GUIManager,GUIClickEventReceiver还有AudioManager,这次写MissionManager 引用关系 首先看下MissionMa ...