假设我有一个包含此内容的文本文件:abcdefghk
我想在位置索引3处写一个带有新文本的文本:xyz
这样我将有一个新的文本文件:abcxyzghk
我如何在原生C ++中实现这一目标?
提前致谢。
答案 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
的任意位置,然后写在那里。如果是文件
将被视为文本,否则,新的相同限制
在这种情况下也适用。在所有情况下,更换
数据必须与其替换的数据具有完全相同的长度。