如何在不将文本复制到新文件的情况下替换文本文件中的字符串?

时间:2014-03-19 14:36:42

标签: c++

我正在使用这个代码完全用我想要替换的任何字符串替换字符串,但首先这个代码将文本文件复制到另一个临时文件,我不想这样做我只想替换那个字符串文件只有可能吗?如果是,怎么样,请举个例子?

这是我的代码:

#include <iostream>
#include <fstream>
#include <string>
#include <algorithm>

using namespace std;


int main()
{
    char *buffer = "Who";
  string search_string = buffer;
  string replace_string = "oranges";
  string inbuf;
  fstream input_file("c:\\file.txt", ios::in);
  ofstream output_file("c:\\file1.txt");

  while (!input_file.eof())
  {
      getline(input_file, inbuf);

      int spot = inbuf.find(search_string);
      if(spot >= 0)
      {
         string tmpstring = inbuf.substr(0,spot);
         tmpstring += replace_string;
         tmpstring += inbuf.substr(spot+search_string.length(), inbuf.length());
         inbuf = tmpstring;
      }

      output_file << inbuf << endl;
  }
  input_file.close();
  remove("c:\\file.txt");
  output_file.close();
  rename("c:\\file1.txt","c:\\file.txt");


}

1 个答案:

答案 0 :(得分:3)

只有搜索到的字符串和替换字符串的长度相同,或者搜索到的字符串位于文件的最末端时,才能提出要求。只有这样才能直接修改源文件。否则,如果两个字符串的长度不同,或者搜索的字符串位于文件的前面/中间,那么根本无法修改源文件,您必须创建一个单独的临时文件,然后在替换源文件时准备好了。