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

How to read line by line and override a line in the same file

本文关键字:文件 一行 何逐行 逐行 读取 覆盖      更新时间:2023-10-16

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

这是我的(简化):

#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");
    }
}

您可以将文件读入内存,然后在更改任何一行后将其写出来。下面的示例将其读入vector,然后将其写回来。

#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也是常见的文本文件格式。