2

さて、私はこれを行う方法に困惑しています。なんとか交換したい行にたどり着きましたが、交換方法がわかりません。

file.txt というファイルに次の内容が含まれているとします。

1
2
3
4
5

3 行目を 3 ではなく 4 に置き換えたいのですが、どうすればよいですか?

#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?
}
4

2 に答える 2

6

ファイルを読み取り/書き込みモードで開いていると仮定すると、現在の位置へのシークを含め、シークによって読み取りと書き込みを切り替えることができます。ただし、書き込まれた文字は既存の文字を上書きすることに注意してください。つまり、新しい文字は挿入されません。たとえば、これは次のようになります。

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';

適切な場所にいる場合でも、ストリームをバインドされていない状態にするためにシークが必要です。シークせずに読み取りと書き込みを切り替えようとすると、未定義の動作が発生します。

于 2012-09-02T20:41:56.647 に答える
1

通常のアプローチは、あるファイルから読み取り、別のファイルに書き込みます。そうすれば、置き換えるデータと同じサイズかどうかを気にすることなく、必要なものを置き換えることができます。

于 2012-09-02T20:51:33.090 に答える