【问题标题】:fseek() doesn't workfseek() 不起作用
【发布时间】:2011-05-22 16:10:28
【问题描述】:

我使用 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);

【问题讨论】:

  • 你不能在文件中间插入东西——你只能修改现有的东西。

标签: c fseek


【解决方案1】:

就像其他人已经说过的那样,在文件中间插入数据并不容易。如果你真的想这样做,你可以实现以下步骤:

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2012-09-22
        • 1970-01-01
        • 1970-01-01
        • 2015-03-01
        • 1970-01-01
        • 2012-05-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多