只要结果与原始长度相同(或更短,并且您不介意添加空格来掩盖差异),这很容易:找到您想要进行修改的位置,写入新数据,然后您重做:
#include <fstream>
#include <ios>
int main() {
std::fstream file("yourfile.txt", std::ios::in | std::ios::out);
file.seekp(7);
file << "19";
return 0;
}
如果您要写入的数据不“适合”您要保留的其他内容,则需要重新写入文件的其余部分,通常是从旧文件复制到新文件,并根据需要修改数据一路走来。
编辑:是这样的:
#include <fstream>
#include <ios>
#include <iterator>
#include <vector>
int main() {
std::vector<double> data;
std::fstream file("yourfile.txt", std::ios::in | std::ios::out);
std::copy(std::istream_iterator<double>(file),
std::istream_iterator<double>(),
std::back_inserter(data));
file.clear();
file.seekp(0);
data[2] = 19.98;
std::copy(data.begin(), data.end(), std::ostream_iterator<double>(file, " "));
return 0;
}
这有一些您可能不想要的效果 - 特别是,就目前而言,它破坏了原始可能具有的任何“线”导向结构,并简单地将结果写成一条长线。如果您想避免这种情况,您可以(例如)一次读取一行,转换该行中的数字(例如,然后将其放入字符串流,然后将它们作为双精度数从那里读取),修改它们,将结果返回一个字符串,并在最后写出带有“\ n”的行。