C ++ Fstream取代特定的线路?

时间:2012-09-02 20:27:36

标签: c++ input fstream getline

好吧,我很难过如何做到这一点。我设法到达了我要替换的线路,但我不知道如何更换它。

说一个名为file.txt的文件包含这个:

1
2
3
4
5

我想替换第3行,使其代表4而不是3.我该怎么做?

#include <Windows.h>
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

fstream file;
string line;

int main(){
file.open("file.txt");
for(int i=0;i<2;i++){
getline(file,line);
}
getline(file,line);
//how can i replace?
}

2 个答案:

答案 0 :(得分:5)

假设您已经在读/写模式下打开文件,您可以通过搜索来切换读取和写入,包括寻找当前位置。但请注意,书写字符会覆盖现有字符,即不插入新字符。例如,这可能如下所示:

std::string line;
while (std::getline(file, line) && line != end) {
}
file. seekp(-std::ios::off_type(line.size()) - 1, std::ios_base::cur);
file << 'x';

即使您位于正确的位置,也需要将流置于未绑定状态。试图在不进行搜索的情况下在读写之间切换会导致未定义的行为。

答案 1 :(得分:1)

通常的方法是在写入另一个文件时从一个文件读取。这样你可以替换你想要的任何东西,而不必担心它是否与它所取代的数据大小相同。