1

我使用 a 和 r+ 打开了一个文件,但是当我使用 fseek 和 ftell 时,文件指针始终为 0。我的文件如下所示:

 1 -3     
 2 -8    

我想在两者之间添加另一行,但它是在最后一行之后添加的。另一个论坛中的某个人说,当您在 append 中打开文件时,指针始终为零,您必须在 r+ 中打开它,如果这不起作用“您必须读取完整的数据,然后将数据插入变量和写回来。” 但我不明白他们的意思。

任何人都可以帮助在文件中间插入数字吗?

谢谢!

像这样的东西会起作用吗?传输数据?

    rewind(fp);
    fscanf(fp,"%d",&ch);
    fprintf(fp1,"%d",ch);
    fseek(fp,1,0);
    fscanf(fp,"%d",&ch);
    fprintf(fp1,"%d",ch);
4

3 回答 3

2

就像其他人已经说过的那样,在文件中间插入数据没有简单的方法。如果你真的想这样做,你可以实现以下步骤:

  1. 创建第二个文件
  2. 将要插入的位置之前的所有数据复制到第二个文件中
  3. 在第二个文件中插入你想要的行
  4. 将剩余数据复制到第二个文件
  5. 删除原始文件
  6. 重命名第二个文件

其他方法是使用二进制文件而不是文本文件。虽然二进制文件有点难学,但是一旦你理解了它们是如何工作的,你就会发现使用它们就像使用数组一样。例如,要执行此任务,您甚至不需要使用辅助文件。

于 2011-05-22T16:43:45.273 回答
1

没有任何open模式可以让您在随机点将数据“插入”到文件中。您可以在不覆盖现有数据的情况下添加数据的唯一地方是文件的末尾(您使用模式“a”打开的内容)。

如果要在随机位置插入,则需要自己进行。

一种更简单的方法是完全重写文件(将旧文件的开头传输到新文件,将数据添加到新文件,传输旧文件的其余部分,最后重命名/覆盖) .

困难的方法:您需要手动将所有数据从插入点“转移”到文件末尾。做到这一点并非易事。

于 2011-05-22T16:18:25.967 回答
0

没有一种简单的方法可以在文件中间插入数据。文件基本上是一个字符数组。要在中间添加一个字符,您需要将插入点之后的所有内容复制到一个位置。使用文件,您需要读取后面的数据并在添加后写入。

通常,当您想做这样的事情时,您会创建一个新文件。您将旧文件复制到要插入的位置,然后写入要插入的数据,然后复制旧文件的其余部分。最后,将新文件重命名为旧文件。

于 2011-05-22T16:19:05.917 回答