【问题标题】:C++ Text File: Writing to the end of a specific lineC++ 文本文件:写入特定行的末尾
【发布时间】:2015-02-04 18:23:11
【问题描述】:

我正在尝试创建一个程序,我可以在其中将字符串写入文本文件中某一行的末尾。

例如,这是一个只有一堆随机数的文本文件:

12 23
53 23

现在,如果我有一个程序在第一行(或任何指定的行)的末尾添加另一个两位数,请记住,如果我继续运行该程序,该行将继续扩展。

所以在运行程序之后,文本文件会是这样的:

12 23 34
53 23

有什么方法可以解决这个问题?

【问题讨论】:

  • fseek()ftell() 会帮助你
  • 将行存储在文件中并从那里更新它们。然后将它们全部写回文件。

标签: c++ file text end-of-line


【解决方案1】:

如果我理解这个问题,这是不可能的。问题是如果你延长一行,它会覆盖下一行。您似乎希望以下行向下移动以腾出空间,但事实并非如此。

除非你的文件很大,否则最好的办法是将文件加载到内存中,修改内存中的数据,然后创建一个新文件来保存结果。 (如果需要,您可以保存到同一个文件中。)

其他算法涉及使用固定大小的块,在您的文件中有一个链表,但听起来您希望您的文件是普通文本,所以这些可能行不通。

【讨论】:

  • 你能给我举个例子吗?谢谢!
  • @FirzanArmani:您提供的细节很少。我提出了需要考虑的问题类型(文件大小、文件格式等)。您已回复,但我仍然没有关于您的要求的任何其他信息。考虑一下,然后就卡在哪里提出更具体的问题,这样会更有成效。
  • @Johnathan Wood Ahh 对此感到抱歉,我最近在学校开始学习 C++,这是我的一个想法。我认为 .txt 文件不会那么大,因为它只是一个演示其功能的小程序。我想知道将 txt 文件加载到内存中、修改然后覆盖 txt 文件的方法,尤其是因为这超出了我目前所学的范围。我应该搜索什么来查找这个?
  • @FirzanArmani:有几种不同类别的例程可供使用。我是老派,可能只使用fopen() 打开文件,fgets() 读取文件的每一行。然后您可以存储或扫描这些数据,根据需要修改任何数据,然后使用fopen() 创建一个新文件,fputs() 写入新文件的每一行。
【解决方案2】:

您不应该尝试就地编辑文本文件。最常见的方法是将编辑后的文件写入临时位置,最后将其重命名为旧名称(删除原始文件后)。

另一种方法是(只要文件足够小)将所有内容加载到内存中并从头开始重写文件。但切勿对敏感文件执行此操作,因为如果您的程序(或您的计算机或电源)在中间崩溃,您的文件将彻底丢失。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-04
    • 2015-05-13
    • 2022-06-11
    • 2011-10-19
    • 1970-01-01
    • 2014-10-26
    相关资源
    最近更新 更多