我逐行阅读文本文件,如果某行符合某些要求,我想覆盖该行并将其保存在同一文件中的相同位置。
这是我的(简化):
#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");
}
}
答案 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也是常见的文本文件格式。这至少应该让你开始。