使用cpp代码编辑文件而不创建新文件

时间:2016-03-10 15:17:42

标签: c++ file

是否可以使用cpp代码编辑文件中的文本。已经有相关的问题,但它并没有解决我的问题。请帮助我。 我已经给出了一个粗略的代码行。 seek()遍历文件并尝试用从该点到行尾的新字符串替换内容。 我需要放置“hello”字符串,并且必须是行尾。

就像我们将new.txt作为

一样

ABCDEFGHIJKLMNOPQRST

如果我希望将文件内容更改为

ABCDEHELLO

我将文件内容改为

ABCDHELLOJKLMNOPQRST

fstream file("new.txt",fstream::in|fstream::out);
file.open();
while(getline(file,str))
{
  if(value==strstr())
  {
    file.seekp(pos);
    str.erase(pos,len);//len specifies the value till end of str
    str.replace(pos,6,"hello");
    char *d=new char[str.length()+1];
    strcpy(d,str.c_str());
    file.write(d,strlen(d));
    delete [] d;

  }
}

如果我可以将文件内容复制到字符串中,对其进行操作,然后复制到新文件即可。

是否可以更改同一文件中的内容。如果这样帮助我,我会对此感到震惊。如果替换字符串比实际存在的字符串长,那么这可以工作,但如果替换字符串小于实际存在的字符串,那么我无法做到。

2 个答案:

答案 0 :(得分:0)

如果您的情况只是文件中的一行,您可以分两个阶段轻松分离I / O过程。阅读文件并获取文本的位置。然后关闭文件并重新打开,然后写下你想要的字符串。请注意,如果文件中有一行,这将有效 检查以下代码

std::string value = "GFGHHFGHH";
std::string str;
std::fstream file("new.txt", std::ios::in);
std::size_t found;
while (file >> str)
{
    found = str.find(value);
    if (found != std::string::npos)
    {
        str.erase(value.length() );
        str.replace(found, 6, "hello");
    }
}
file.close();
file.open("new.txt", std::ios::out);
file << str;
file.close();

答案 1 :(得分:0)

您可以使用sed的系统调用来执行此操作:

string s="sed -i s/hey/ho/g file0102.txt";
system(s.c_str());