编程语言
首页 > 编程语言> > C/C++使用ofstream遍历目录并将目录中的文件路径写入文件中

C/C++使用ofstream遍历目录并将目录中的文件路径写入文件中

作者:互联网

一、概述

  案例:实现一个小功能,遍历文件目录并将目录下的文件路径写入一个文件中。做这个小功能是为了OpenCV的人脸识别准备数据。(文件路径后面跟上文件所对应的标签)

  需要导入的头文件:

#include <fstream>
#include <string>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include <stdio.h>
#include <stdlib.h>
主要使用到的函数及方法:
1.DIR:opendir、dirent、readdir、ofstream等

 

二、代码示例

 使用步骤:
ofstream out;
string filename = string("/Users/yangwei/Documents/tony/opencv/orl_faces/targetData.txt");
            out.open(filename,ios::out);
            prepareImageData(srcDirPath.toStdString().c_str(),"");
            out.close();
/**
 * 准备人脸数据
 * 将人脸数据写入txt文件中
 * @brief Face_Eigen_Face_Recognizer::prepareImageData
 */
void Face_Eigen_Face_Recognizer::prepareImageData(const char * dirPath,char *appStr){
    DIR *pDir;
    struct dirent *ptr;
    if(!(pDir=opendir(dirPath))){
        qDebug()<<"Folder doesn't Exist!";
        return;
    }
    while((ptr=readdir(pDir))!=0){
        if(strcmp(ptr->d_name,".")!=0&&strcmp(ptr->d_name,"..")!=0){
            char resultStr[100];
            sprintf(resultStr,"%s%s",dirPath,ptr->d_name);

            struct stat s;
            if(stat(resultStr,&s)==0){//路径存在
                if(s.st_mode&S_IFDIR){//文件夹
                    char *dirName = ptr->d_name;
                    char targetName[5];
                    memcpy(targetName,dirName+1,strlen(dirName));
                    cout <<"dirName:"<<dirName<< "--->targetName:"<<targetName<<endl;
                    prepareImageData(resultStr,targetName);
                }
            }else{
                sprintf(resultStr,"%s/%s",dirPath,ptr->d_name);
                //                cout << resultStr<<endl;
                //                cout <<"error"<<endl;
                //将得到的数据存储到txt文件中
                if(out.is_open()){//此处的out为ofstream,由其open函数来提供初始化
                    out << resultStr <<" "<<appStr<<endl;
                }else{
                    cout <<"file is not opened"<<endl;
                }

            }

        }
    }
    closedir(pDir);
}

 

三、演示图片

 

标签:文件,name,C++,ptr,char,Face,include,目录,out
来源: https://www.cnblogs.com/tony-yang-flutter/p/16241249.html