获取指定目录及其子目录下所有文件的绝对路径
来源:互联网 发布:mac ps 2018无法破解 编辑:程序博客网 时间:2024/06/11 09:56
获取指定目录及其子目录下所有文件的绝对路径
这个问题困扰了我很久,听说python和java的OS库很容易解决,而在linux下便更容易了。但我常在windows下用C++,对其他语言不太熟悉。刚开始从网上搜了一段批处理指令,将后缀名改为bat,便可以将所有文件路径重定向到指定的文件中,用起来还挺方便。
@echo off & setlocal EnableDelayedExpansionfor /f "delims=" %%i in ('"dir /a/s/b/on *.*"') do (set file=%%~fiset file=!file:/=/!echo !file! >> resPath.txt)
今天得空,搜了一下C++的用法,想来与其他语言也是相似的。源码如下:
//getFilepath.h#include<io.h>#include<string>#include<vector>using namespace std;void getFiles(string path, vector<string>& files);
//getFilepath.cpp#include "getFilepath.h"void getFiles(string folderpath, vector<string>& filespath){ //文件句柄 ,文件信息 long hFile = 0; struct _finddata_t *fileinfo = new _finddata_t; string pathPrefix; if ((hFile = _findfirst(pathPrefix.assign(folderpath).append("\\*").c_str(), fileinfo)) != -1){ do{ //如果是子目录,递归查找子文件夹 if ((fileinfo->attrib & _A_SUBDIR)){ if (strcmp(fileinfo->name, ".") != 0 && strcmp(fileinfo->name, "..") != 0) getFiles(pathPrefix.assign(folderpath).append("\\").append(fileinfo->name), filespath); } //如果是文件,则加入查找结果 else{ filespath.push_back( pathPrefix.assign(folderpath).append("\\").append(fileinfo->name)); } } while (_findnext( hFile, fileinfo) == 0); //通过句柄关闭当前目录查找 _findclose(hFile); }}
//main.cpp#include "getFilepath.h"#include <iostream>using namespace std;int main(){ char *folderpath = "D:\\Users\\jackren\\documents\\visual studio 2013\\Projects\\recFilePath\\recFilePath"; vector<string> filepath; //获取该路径下的所有文件 getFiles(folderpath, filepath); int fpsize = filepath.size(); for (int i = 0; i < fpsize; i++) cout << filepath[i].c_str() << endl; system("pause");}
代码中主要用到了io.h头文件中的三个函数和一个结构体,介绍如下:
- struct _finddata_t用于存储文件相关信息,在32位编译环境下,定义为以下形式:
struct _finddata64i32_t { unsigned attrib; __time64_t time_create; /* -1 for FAT file systems */ __time64_t time_access; /* -1 for FAT file systems */ __time64_t time_write; _fsize_t size; char name[260];};
unsigned atrrib表示文件属性的存储位置。它存储一个unsigned单元,用于表示文件的属性。文件属性是用位表示的,主要有以下一些:_A_ARCH(存档)、_A_HIDDEN(隐藏)、_A_NORMAL(正常)_A_RDONLY(只读)、_A_SUBDIR(文件夹)、_A_SYSTEM(系统)。
这些都是在 io.h 中定义的宏,可以直接使用,而本身的意义其实是一个无符号整型(只不过这个整型应该是2的几次幂,从而保证只有一位为1,而其他位为0)。既然是位表示,那么当一个文件有多个属性时,它往往是通过位或的方式,来得到几个属性的综合。例如只读+隐藏+系统属性,应该为:_A_HIDDEN | _A_RDONLY |\ _A_SYSTEM 。
name表示文件名,size表示文件大小。
long _findfirst( char *filespec, struct _finddata_t *fileinfo );
返回值:如果查找成功的话,将返回一个long型的唯一的查找用的句柄(就是一个唯一编号)。这个句柄将在_findnext函数中被使用。若失败,则返回-1。
参数:
filespec:标明文件的字符串,可支持通配符。比如:*.c,则表示当前文件夹下的所有后缀为C的文件。
fileinfo :这里就是用来存放文件信息的结构体的指针。这个结构体必须在调用此函数前声明,不过不用初始化,只要分配了内存空间就可以了。函数成功后,函数会把找到的文件的信息放入这个结构体中。
int _findnext( long handle, struct _finddata_t *fileinfo );
返回值:若成功返回0,否则返回-1。
int _findclose( long handle );
返回值:成功返回0,失败返回-1。
- 获取指定目录及其子目录下所有文件的绝对路径
- 获取指定目录及其子目录的所有文件(JAVA)
- Linux查找当前目录及其子目录下所有包含指定字符串的文件
- 获取指定目录下的所有文件名(包括子目录)
- 获取指定目录下所有的子目录和文件
- shell脚本获取一个目录、及其子目录下的所有文件
- Linux下替换指定的目录及其子目录下所有文件中的某些内容(3种方法)
- 列出指定目录下的所有文件的绝对路径
- 递归列出指定目录下的所有文件的绝对路径
- linux显示指定目录下所有的文件,子目录及子目录的文件
- 遍历指定目录下的所有文件和目录, 以及子目录下的文件和目录
- 递归获取目录、子目录下的所有文件
- [批处理]把指定文件复制到指定目录下的所有子目录下(包括子目录的下级目录)
- 获取指定目录下的所有文件
- 指定目录下的所有绝对路径
- 获取指定目录及子目录中所有文件列表
- Python 读取指定目录下的所有子目录及所有文件
- Python 读取指定目录下的所有子目录及所有文件
- 前端组件库
- Python OOP Practice
- Error:Failed to resolve: com.android.databinding:adapters:1.2.1
- 【转载】Unity资源解决方案之AssetBundle
- Android Studio 2.3.0.8 正式版 download, 下载地址
- 获取指定目录及其子目录下所有文件的绝对路径
- 一步一步学网络爬虫(从python到scrapy)
- sublime 安装phpcs
- 这几个的用法傻傻分不清
- [LeetCode]399. Evaluate Division
- C++ 'include' 的两个头文件互相包含出错
- SecureCRT 日志添加时间戳(精确到毫秒)
- POJ1308 Is It A Tree?(树,并查集)
- Java动态代理模式