首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >fseek()不起作用

fseek()不起作用
EN

Stack Overflow用户
提问于 2011-05-23 00:10:28
回答 3查看 2K关注 0票数 1

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

代码语言:javascript
复制
 1 -3     
 2 -8    

我想在这两行之间添加另一行,但它是在最后一行之后添加的。另一个论坛上的一些人说,当你在append中打开文件时,指针总是零,你必须在r+中打开它,如果这样做不起作用,“你必须读取完整的数据,然后将数据插入变量中,并将其写回。”但我不明白他们这是什么意思。

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

谢谢!

像这样的东西可以工作吗?来传输数据?

代码语言:javascript
复制
    rewind(fp);
    fscanf(fp,"%d",&ch);
    fprintf(fp1,"%d",ch);
    fseek(fp,1,0);
    fscanf(fp,"%d",&ch);
    fprintf(fp1,"%d",ch);
EN

回答 3

Stack Overflow用户

发布于 2011-05-23 00:43:45

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

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

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

票数 2
EN

Stack Overflow用户

发布于 2011-05-23 00:18:26

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

如果你想在一个随机的位置插入,你需要自己做。

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

最困难的是:您需要手动将所有数据从插入点“移动”到文件末尾。这可不是小事一桩。

票数 1
EN

Stack Overflow用户

发布于 2011-05-23 00:19:06

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6089136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档