如何在文件中间插入和删除一些字符?

Inf*_*ies 6 c file-io

我想在文件中间插入和删除一些字符.

fopen()和fdopen()只允许在最后追加.

是否有允许这些操作的简单方法或现有库?

ric*_*chb 7

没有简单的方法.你手动完成.例如:

  1. 在进入内存之前,先读取要插入的块
  2. 寻求新的职位
  3. 写下您刚刚在新位置读取的块
  4. 回到你想要插入的地方
  5. 写下新数据.

  • @Infinity:使用`fopen("1.txt","r +")`打开阅读*和*写作.模式`"w"`覆盖以前可能存在的任何文件,留下一个空文件. (2认同)

Bal*_*arq 7

正如其他人已经告诉过你的那样,你必须手动完成,并使用fseek来到达你必须插入或添加字符的地方.您可以通过执行以下操作轻松地在中间添加新字符:

  1. 转到文件的最后一个字节,并存储文件的旧文件大小.
  2. 转到要插入新字符的位置(比如这是位置):fread(旧文件大小 - 位置)字节,并将它们存储在缓冲区中.
  3. fseek再次定位.
  4. 改写你的新角色.
  5. fwrite你以前读过的缓冲区.

如果你想删除中间的字符,那么这更棘手.实际上你不能缩短文件.你有两种可能性:第一种,你就是

  1. 打开文件并读取文件,跳过要删除的字符并将其存储在缓冲区中
  2. 用"b"关闭并重新打开文件,其内容将被删除,
  3. 写入缓冲区并关闭文件.

在第二种可能性中,您:

  1. 将缓冲区读取到要删除的字符前面的字符.
  2. fseek到要删除的字符的开头
  3. fwrite缓冲区.
  4. 修剪文件的其余部分.

第四点是"棘手的",因为没有标准(便携)方式来做到这一点.一种可能性是使用操作系统系统调用来截断文件.另一个更简单的可能性就是在第4点写入EOF.文件可能会比它应该更大,但它可以解决问题.