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