fseek()不起作用

时间:2011-05-22 16:10:28

标签: c fseek

我使用和r +打开了一个文件,但是当我使用fseek和ftell时,文件指针总是为0。 我的文件看起来像这样:

 1 -3     
 2 -8    

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

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

谢谢!

这样的事情会起作用吗? 转移数据?

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

3 个答案:

答案 0 :(得分:2)

与其他人已经说过的一样,没有简单的方法可以在文件中间插入数据。如果您真的想这样做,可以执行以下步骤:

  1. 创建第二个文件
  2. 将之前的所有数据复制到要插入第二个文件的位置
  3. 将您想要的行插入第二个文件
  4. 将剩余数据复制到第二个文件
  5. 删除原始文件
  6. 重命名第二个文件
  7. 其他方法是使用二进制文件而不是文本文件。虽然二进制文件有点难以学习,但是一旦你理解了它们的工作方式,你就会发现使用它们就像使用数组一样。例如,要执行此任务,您甚至不需要使用辅助文件。

答案 1 :(得分:1)

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

如果你想在随机位置插入,你需要自己动手。

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

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

答案 2 :(得分:0)

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

通常,当您想要执行此类操作时,您需要创建一个新文件。将旧文件复制到要插入的位置,然后编写要插入的数据,然后复制旧文件的其余部分。最后,将新文件重命名为旧文件。