如何逐行阅读并覆盖同一文件中的一行

时间:2015-10-07 23:21:49

标签: c++

我逐行阅读文本文件,如果某行符合某些要求,我想覆盖该行并将其保存在同一文件中的相同位置。

这是我的(简化):

#include <iostream>
#include <string>
#include <fstream>

using namespace std;

int main(){

    fstream file;
    string line;
    file.open("Test.txt");

    while (getline(file, line))
    {
      if (line.size() > 7) file << line.append(" <- long line");
    }
}

1 个答案:

答案 0 :(得分:1)

您可以将文件读入内存,然后在更改任何行后将其写出。以下示例将其读入矢量,然后将其写回。

#include <iostream>
#include <string>
#include <fstream>
#include <vector>

using namespace std;

int main()
{
    fstream file;
    string line;
    file.open("Test.txt", fstream::in);
    if (file.fail()) exit(-1);

    vector<string> vec;
    while (getline(file, line, '\n'))
    {
        string ln = line;
        vec.push_back(ln);
    }
    file.close();

    // manipulate your lines here

    file.open("Test.txt", fstream::out | fstream::trunc);
    for (vector<string>::iterator it = vec.begin(); it != vec.end(); ++it)
    {
        file.write(it->c_str(), it->length());
        file.write("\n", 1);
    }
    file.close();
}

但请注意,当您更改线条时,后面的线条位置将会改变,除非您要更改的线条与原始线条的大小相同。另请注意,这是一个简单的ANSI文件示例,但UNICODE和UTF-8也是常见的文本文件格式。这至少应该让你开始。