如何将新字符串重写到文本文件中的特定位置

时间:2012-05-21 07:52:25

标签: c++

假设我有一个包含此内容的文本文件:abcdefghk

我想在位置索引3处写一个带有新文本的文本:xyz

这样我将有一个新的文本文件:abcxyzghk

我如何在原生C ++中实现这一目标?

提前致谢。

2 个答案:

答案 0 :(得分:3)

只需使用fseek进行定位和重写即可。如果需要插入,则应使用其他方法。首先,打开附加(“a + t”),设置位置和写入。

if (FILE* f = fopen("", "a+t"))
{
    const char* line = "xyz";
    const long int offset = 3;
    fseek(f, offset, SEEK_SET);
    fputs(line, f);
    fclose(f);
}

请注意,这是C ++代码,我将FILE* f置于if范围内,以避免在f之后意外使用fclose。注意可能的I / O异常(EOF之外的fseek)。

答案 1 :(得分:2)

通常,修改文本文件中间数据的唯一方法是 通过阅读,修改内存中的数据,并重写整个数据 文件(最好是具有不同名称的内容,然后删除 原始并重命名新文件)。如果替换文本是完全正确的 但是,与原始文本的长度相同,并且没有新的 在任何一行中,你可以读到该位置,然后写入 位置。

或者,您可以以二进制模式打开文件,寻求一个 使用ostream::seekp的任意位置,然后写在那里。如果是文件 将被视为文本,否则,新的相同限制 在这种情况下也适用。在所有情况下,更换 数据必须与其替换的数据具有完全相同的长度。