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

C++ 如何将新字符串重写到文本文件中的特定位置,c++,C++,假设我有一个包含以下内容的文本文件:abcdefghk 我想用一个新的文本:xyz在位置索引3处写一个文本 这样我就有了一个新的文本文件:abcxyzghk 我在本土化C++中如何实现这一点?,一般来说,修改文本文件中间数据的唯一方法是 通过读取它,修改内存中的数据,并重写整个 文件(最好是其他名称的文件,然后删除 原始文件和重命名新文件)。如果替换文本完全正确 但是,长度与原文相同,没有新的内容 无论哪一行,你都可以读到那个位置,然后在那个位置写 位置 或者,您可以以二进制模式打开文件,查找

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

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

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


<>我在本土化C++中如何实现这一点?

,一般来说,修改文本文件中间数据的唯一方法是 通过读取它,修改内存中的数据,并重写整个 文件(最好是其他名称的文件,然后删除 原始文件和重命名新文件)。如果替换文本完全正确 但是,长度与原文相同,没有新的内容 无论哪一行,你都可以读到那个位置,然后在那个位置写 位置

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

一般来说,修改文本文件中间数据的唯一方法是 通过读取它,修改内存中的数据,并重写整个 文件(最好是其他名称的文件,然后删除 原始文件和重命名新文件)。如果替换文本完全正确 但是,长度与原文相同,没有新的内容 无论哪一行,你都可以读到那个位置,然后在那个位置写 位置

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

只需使用
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++代码,我把代码< >文件*f/COD>放在IF的范围内,避免在代码< fcx后意外使用<代码> f>代码>。注意可能的I/O异常(
fseek
在EOF之外)。

只需使用
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++代码,我把代码< >文件*f/COD>放在IF的范围内,避免在代码< fcx后意外使用<代码> f>代码>。注意可能的I/O异常(
fseek
在EOF之外)。

您尝试了什么?基本上,您只需读取文件,创建新字符串并写入一个新文件。是的,但在向文件写入文本后,我想用Ofstream替换特定位置的特定文本,只需使用fread(),然后使用fseek()向前移动到所需位置,最后使用fwrite()即可如果您使用的是
std::ofstream
,则使用和@blastfurny,但
seekp()
(或
fseek()
)到哪里?如果文件是以文本模式打开的,则唯一合法的目的地(以及唯一可能在Unix以外的平台上正常工作的目的地)是
0
或从precedant
tellg()
返回的值。您尝试了什么?基本上,您只需读取文件,创建新字符串并写入一个新文件。是的,但在向文件写入文本后,我想用Ofstream替换特定位置的特定文本,只需使用fread(),然后使用fseek()向前移动到所需位置,最后使用fwrite()即可如果您使用的是
std::ofstream
,则使用和@blastfurny,但
seekp()
(或
fseek()
)到哪里?如果文件是以文本模式打开的,那么唯一合法的目的地(以及唯一可能在Unix以外的平台上正常工作的目的地)是
0
,或者是从Prevent
tellg()返回的值。。。好!!但是a+t和r+唯一的区别是写作的位置。因为我们是手动设置的,所以这并不重要。我们所需要的一切-不要重写文件。a+t将设置文件末尾的位置。r+用于读取目的,然后寻找特定位置。如果我使用r+,效果很好。谢谢!我想应该是:fopen(“,”r+”)嗯。。。好!!但是a+t和r+唯一的区别是写作的位置。因为我们是手动设置的,所以这并不重要。我们所需要的一切-不要重写文件。a+t将设置文件末尾的位置。r+用于读取目的,然后寻找特定位置。如果我使用r+,效果很好。谢谢!