C++ 下文件的读取和写入

来源:互联网 发布:惯性参考系 知乎 编辑:程序博客网 时间:2024/06/04 16:42
/*项目中使用到一个conf的配置文件。读取文件。修改其中的数据并重新保存进去记录下来方便下次使用*/#include<fstream>#include<string>#include<iostream>#include <vector>#include <stdio.h>#include <io.h>using namespace std;//字符串的分割void split(std::string str,std::string pattern,vector<std::string>& strvec){    std::string::size_type pos;    str+= pattern;//扩展字符串以方便操作    size_t size = str.size();    for(size_t i=0; i<size; i++)    {        pos=str.find(pattern,i);        if(pos < size)        {            std::string s=str.substr(i,pos-i);            strvec.push_back(s);            i=pos+pattern.size()-1;        }    }}void WirteIntoConfig(vector<vector<string>> vec){    ofstream fout;    fout.open("my_route.conf",ios_base::out);    string str = "\n";    if (fout.is_open())    {        for (size_t n=0; n < vec.size();n++)        {            if (vec[n].size() == 1)            {                string c = vec[n][0] + str;                fout<<(c);            }            else            {                string a = vec[n][0] + "=" + vec[n][1] +str;                fout << a;            }        }    }    fout.close();}void main(){    vector<vector<string>> vecAllString;    ifstream in("my_route.conf");    string s;    while(getline(in,s))//着行读取数据并存于s中,直至数据全部读取    {        cout<<s.c_str()<<endl;        vector<std::string> vecStr;        split(s,"=",vecStr);        if (!vecStr.empty() && vecStr.size() == 2)        {            string::size_type index;            index = s.find("destinations");            if (index != string::npos)            {                vecStr[1] = "127.0.0.1:3306";                cout <<vecStr[1]<<endl;            }        }        if (vecStr.empty()){continue;}        vecAllString.push_back(vecStr);    }    in.close();    WirteIntoConfig(vecAllString);    getchar();}