myfile<<hashdugumu[key].numara;
我有这段代码。例如,我想写第八行。我怎么用c ++做的?提前谢谢。
答案 0 :(得分:0)
如果你要写的行是完全相同的长度(以字节为单位,而不是字符,请记住一些编码(例如UTF-8)是可变长度)然后它是非常简单:只需跳过前七行,然后写下该行。
但有一点需要注意:input streams和output streams有不同的流位置。因此,如果您从combined input/output file stream读取,那么只有读取位置会发生变化,因此如果您只是尝试直接写入,那么您将不会在同一位置写入。要解决此问题,您需要获取读取位置,并将写入位置设置为相同的值。
作为替代方案,或者如果要写入的数据与现有数据的大小不同,则必须使用临时的&#34;缓冲区&#34;,无论是另一个文件还是实际的 - 内存缓冲区。
如果文件不大,您可以使用内存缓冲区,例如使用std::vector
作为行。将每一行读入向量,然后修改要修改的行(向量中的元素)。最后重新打开文件进行写入,截断它,然后只写每个&#34; line&#34;到文件。
上面有一点点问题,但是当涉及到数据的重写时,如果文件被截断,然后在写入文件时出现错误,则可能会丢失数据。这可以通过使用临时文件来解决。
使用临时文件,它更容易不打扰内存缓冲区,而是从原始文件中读取并直接写入临时文件。知道何时应该写其他内容是通过跟踪当前行号来完成的,如果您一次只读一行,这很容易。在你的例子中,你读取原始文件中的前七行并将它们写入临时文件,在第七行之后你写了特殊的八行,同时从原始文件中跳过原来的八行,然后继续读/写剩余的线。完成后关闭文件,然后将临时文件重命名为原始文件。