c++关于目录的创建与读取操作
来源:互联网 发布:python 书籍 知乎 2016 编辑:程序博客网 时间:2024/05/29 04:06
主要用到了以下几个头文件(类):io.h, fstream, string。
1、读取某给定路径下所有文件夹与文件名称,并带完整路径。代码如下:
void getAllFiles( string path, vector<string>& files) { //文件句柄 long hFile = 0; //文件信息 struct _finddata_t fileinfo; //很少用的文件信息读取结构 string p; //string类很有意思的一个赋值函数:assign(),有很多重载版本 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) ); getFilesall( p.assign(path).append("\\").append(fileinfo.name), files ); } } else { files.push_back(p.assign(path).append("\\").append(fileinfo.name) ); } }while(_findnext(hFile, &fileinfo) == 0); //寻找下一个,成功返回0,否则-1 _findclose(hFile); } }
该函数有两个参数,第一个为路径字符串(string类型,最好为绝对路径);第二个参数为文件夹与文件名称存储变量(vector类型,引用传递)。在主函数中调用格式(并将结果保存在文件"AllFiles.txt"中,第一行为总数):
char * filePath = "E:\\YunShi"; vector<string> files; char * distAll = "AllFiles.txt";getFilesall(filePath, files);ofstream ofn(distAll);int size = files.size(); ofn<<size<<endl;for (int i = 0;i<size;i++) { ofn<<files[i]<<endl; }ofn.close();
同理,只读取某给定路径下的当前文件夹名(以下类似,只给出函数,调用案例同上):void getJustCurrentDir( string path, vector<string>& files) { //文件句柄 long 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(fileinfo.name); //files.push_back(p.assign(path).append("\\").append(fileinfo.name) ); } } }while(_findnext(hFile, &fileinfo) == 0); _findclose(hFile); } }
只读取某给定路径下的当前文件名:
void getJustCurrentFile( string path, vector<string>& files) { //文件句柄 long 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)) { ; } else { files.push_back(fileinfo.name); //files.push_back(p.assign(path).append("\\").append(fileinfo.name) ); } }while(_findnext(hFile, &fileinfo) == 0); _findclose(hFile); } }
只读取某给定路径下的所有文件名(即包含当前目录及子目录的文件):
void getFilesAll( string path, vector<string>& files) { //文件句柄 long 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) ); getFilesA( p.assign(path).append("\\").append(fileinfo.name), files ); } } else { files.push_back(p.assign(path).append("\\").append(fileinfo.name) ); } }while(_findnext(hFile, &fileinfo) == 0); _findclose(hFile); } }
以上列出目录为转载,以下代码演示如何创建多个目录
我们知道如果没有父目录就无法创建子目录,通过一个数组依次读取目录名,遇到'/'或者'\'(注意转义'\\')检查目录是否存在,如果不存在就创建。
bool CreateDir(){ QString tmp = QString("./%1Info/Data/%2/").arg(section).arg(current_date.toString("yyyyMMdd"));//我用的是Qt string dir = tmp.toStdString(); cout << dir.c_str() << " " << dir.length() << endl; int dirPathLen = dir.length(); if (dirPathLen > MAX_PATH_LEN) { return false; } char tmpDirPath[MAX_PATH_LEN] = {0}; for (int i = 0; i < dirPathLen; i++) { tmpDirPath[i] = dir[i]; if (tmpDirPath[i] == '\\' || tmpDirPath[i] == '/') { if (access(tmpDirPath, 0) == -1) { cout<<tmpDirPath<<" is not existing"<<endl; cout<<"now make it"<<endl; int flag=mkdir(tmpDirPath); if (flag == 0) { cout<<"make successfully"<<endl; } else { cout<<"make errorly"<<endl; } } } } return true;}
前面部分转载自:http://www.cnblogs.com/tgyf/p/3839894.html
0 0
- c++关于目录的创建与读取操作
- php递归读取目录与创建目录
- 【C#】XML的创建与读取
- nodejs-操作文件系统创建读取目录
- 使用linux c 目录操作函数,读取任一目录下的所有目录信息文件信息
- 【C#】关于文件的写入与读取
- matlab 基本关于文件创建,读取的操作
- C的目录操作
- 纯C开发:目录创建,目录删除,目录遍历操作
- C语言中关于对目录的操作
- linux c 关于文件目录操作的总结
- linux c 文件与目录读取
- 一个用java.util.zip创建和读取zip文件的类,可以操作目录
- android studio关于assets目录的创建、位置指向以及文件读取
- C语言的文件读取与写入操作
- C语言/C++文件的读取与写入操作
- C# 关于目录的操作
- linux c关于目录是否存在,新建目录等操作
- Linux服务器上部署web环境
- 2017春招实习总结篇
- Vue-login 案例的学习(二)
- 【PHP学习笔记1】php基础介绍
- Java 反射最佳实践
- c++关于目录的创建与读取操作
- 算法---N以内2出现的次数
- 4.29
- 数组相关类 假写数组
- [LeetCode]202. Happy Number
- 【PHP学习笔记2】基础语法
- @ModelAttribute原理概述以及使用注意点
- BAT面试之操作系统内存详解
- 94. Binary Tree Inorder Traversal