如何使用c ++将数据从向量写入特定位置的文本文件?

时间:2016-07-23 06:20:19

标签: c++

如果我的文本文件看起来如此..

usrname@gmail.com 3223434324 data1 data2

name@gamil.com 2343454454 data3 data4

我已经使用vector读取了这些值。 我需要在文件的第一行末尾添加一个字符串。 我该怎么办? 我的代码如下:

system("cls");
cout << "\nView proposal\n";
fstream file1;
string ap, aname, aphno;
file1.open("C:\\Users\\Nandhu\\Desktop\\glosys\\joinpolicy.txt",
    ios::in|ios::app);
while(!file1.eof())
{
    while(getline(file1, text))
    {
        istringstream xstream(text);
        vector<string> vcol;
        while(getline(xstream, word, ','))
        {
            vcol.push_back(word);
        }
        vec.push_back(vcol);
    }
    file1.close();
}
for(vector<vector<string> >::iterator itr = vec.begin();
    itr != vec.end(); itr++)
{
    for(vector<string>::iterator itr2 = itr->begin();
        itr2 != itr->end(); itr2++)
    {
        string str;
        str = *itr2;
        cout << str << " ";
    }
    cout << "\n";
}
cout << "\n1.Approve";
cout << "\n2.Reject";
cout << "\nDo you wish to approve?";
cin >> ans;     
if(ans == 'y')
{
    file1.open("C:\\Users\\Nandhu\\Desktop\\glosys\\joinpolicy.txt",
        ios::in|ios::app);
    file1.seekg(0);
    cout << "\nEnter the customer id you wish to approve for:";
    cin >> aname;
    vec.clear();
    if(file1.is_open())
    {
        while(getline(file1, text))
        {
            istringstream xstream(text);
            vector<string> vcol;
            while(getline(xstream, word, ','))
            {
                vcol.push_back(word);
            }
            vec.push_back(vcol);
        }
        file1.close();
    }

    for(vector<vector<string> >::iterator itr = vec.begin();
        itr != vec.end(); itr++)
    {   
        vector<vector<string> > vec;
        vector<string> vcol;

        for(vector<string>::iterator itr2 = itr->begin();
            itr2 != itr->end(); itr2++)
        {
            string str;
            str=*itr2;
            if(str==aname)
            {
                itr + 3;    
                file1.open("C:\\Users\\Nandhu\\Desktop\\glosys\\joinpolicy.txt",
                    ios::out|ios::app);
                vector<string>.insert(itr->end(), "approved");
                file1 << "approved";
                cout << "approved";
                file1.close();
            }   
        }
    }
}       
break;

1 个答案:

答案 0 :(得分:0)

您无法直接在文件中间插入数据。您只能重写整个文件或在最后附加到该文件。

要在中间插入数据,您有几个选项:

1)将文件读入内存缓冲区,根据需要进行转换,然后将文件截断为零长度并从缓冲区重写。

2)为1,但不是截断原始文件,而是编写一个新的(临时)文件,然后将其重命名为原始文件。

3)确定需要进行更改的位置,在该点之后读取内存缓冲区中的所有内容并进行更改,然后将文件截断为先前标识的大小,然后以追加模式将内存缓冲区写入文件

4)内存映射文件,进行所需的更改并将其刷新到文件中。