假设我有一个包含以下内容的文本文件:abcdefghk
我想用新文本在位置索引 3 处写一个文本:xyz
这样我就会有一个新的文本文件:abcxyzghk
如何在本机 C++ 中实现这一点?
假设我有一个包含以下内容的文本文件:abcdefghk
我想用新文本在位置索引 3 处写一个文本:xyz
这样我就会有一个新的文本文件:abcxyzghk
如何在本机 C++ 中实现这一点?
只需用于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 异常(fseek
在 EOF 之外)。
一般来说,修改文本文件中间的数据的唯一方法是读取它,修改内存中的数据,然后重写整个文件(最好用不同的名称,然后删除原始文件并重命名新文件)。但是,如果替换文本的长度与原始文本完全相同,并且两者都没有新行,则您可以读取到该位置,然后在该位置写入。
或者,您可以以二进制模式打开文件,使用 寻找任意位置ostream::seekp
,然后在那里写入。如果文件将被视为文本,则在这种情况下也适用与新行有关的相同限制。在所有情况下,替换数据的长度必须与其替换的数据完全相同。