1

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

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

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

如何在本机 C++ 中实现这一点?

4

2 回答 2

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 范围内,以避免ffclose. 注意可能的 I/O 异常(fseek在 EOF 之外)。

于 2012-05-21T08:27:48.390 回答
2

一般来说,修改文本文件中间的数据的唯一方法是读取它,修改内存中的数据,然后重写整个文件(最好用不同的名称,然后删除原始文件并重命名新文件)。但是,如果替换文本的长度与原始文本完全相同,并且两者都没有新行,则您可以读取到该位置,然后在该位置写入。

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

于 2012-05-21T08:19:36.940 回答