ubuntu+qt下c++最简单的文件夹和文件操作方法

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_40167046/article/details/98944855

1.创建或者创建一个文件夹

 std::string path = "/home/zpf/zpf/floder/"; 
 std::string command;
 //command = "mkdir -p " + path; //创建文件夹
 command = "rm -r " + path;  //删除文件夹
 system(command.c_str());

注意,小心坑:-r和-p后面一定要加空格,和命令行格式保持一致

2.遍历文件夹,保存文件名

#include <unistd.h>
#include <dirent.h>



//遍历文件夹,将文件名保存起来
std::vector<std::string> file_name;
file_name.clear();
DIR *dir;
struct dirent *ptr;
if ((dir = opendir(data_temp_path.c_str())) == NULL)
{
   LOG(error) << "Open dir error!";
}
while ((ptr=readdir(dir)) != NULL)
{
   if (ptr->d_name[0] == '.'){
   continue;     //跳过'.'和'..'两个目录
    }
   file_name.emplace_back(ptr->d_name);
}
closedir(dir);

注意:要跳过'.'和’..‘两个目录才能得到正确结果

3.删除文件

std::string path = folder_path + file_name;//一个文件的绝对路径
std::string command;
command = "rm " + path;
std::system(command.c_str());

4.修改文件名

 std::string cy1 = folder_path+"/"+old_name;
 std::string cy2 =folder_path+"/"+new_name;
 std::string cy_command1 = "mv " + cy1 + " " + cy2;
 std::system(cy_command1.c_str());

5.数据写入文件

std::string path = folder_path + file_name;
std::ofstream outFile(path,std::ios::out); 
if(!outFile){   //有此文件,就在原文件上写入,没有则会生成一个新的文件
   return 0;
}
outFile << points_list[0];
int points_num = points_list.size();
for (int i=1 ; i<points_num ; ++i)
{
   outFile <<","<<points_list[i].get_pointId();
}                         
outFile << std::endl; //第一行写完,换行

int result_size = result.size();  //result是一个按行存放的std::vector<std::vector<std::string>>格式的二位数组
for(int i=0;i<result_size;++i){
     outFile<<result[i][0];
   for(int j=1;j<points_num;++j){
     outFile<<","<<result[i][j];
    }
     outFile<<std::endl;
}
outFile.close();

6.读取文件夹下对应文件.csv里的内容,一行行的读,采用stringstream和getline

std::string path = folder_path + "/" + file_name; //单个文件,可与上面2结合循环处理每个文件
std::ifstream inFile(path,std::ios::in);
if (!inFile) //no file
{
   return 0;
}

std::vector<std::vector<double>> result; //按行存放
result.clear();
std::vector<double> temp;//用于保存每行的数据
std::string lineStr; //保存读取到的一行数据
std::string str;     //用于暂时保存中间字符串,分词用
std::stringstream ss1; //根据分隔符来分词
std::stringstream ss2; //自动转化流的格式
std::getline(inFile,lineStr);//读第一行,第一行的格式与其他行不一样
int column;//数据的列数
 while (std::getline(inFile,lineStr))
    {
      ss1.clear();
      ss1.str("");
      ss1<<lineStr;
      double data_temp;
      temp.clear();
      for (int k=0 ; k<column ; ++k)//
      {
         std::getline(ss1,str,',');
         ss2.clear();
         ss2.str("");
         ss2<<str;
         ss2>>data_temp;
         temp.emplace_back(data_temp);
      }
      result.emplace_back(temp);
    }
inFile.close();

猜你喜欢

转载自blog.csdn.net/qq_40167046/article/details/98944855