加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

C语言文件任意位置写入数据问题

(2007-09-19 12:54:32)
标签:

IT/科技

 在C语言下,如何在文件任意位置写入指定数据?这个问题看似很简单,其实还是有些小麻烦的。
fopen--打开  fread--读取  fflush--缓冲区写入文件  fseek--文件指针定位  fwrite--写入  fclose--关闭 rewind--重置指针至文件头
可以使用以上函数组合进行文件操作,不过目前遇到的一个问题是,使用fseek找到文件指针后,想在指定位置写入特定数据(不想覆盖原有数据),不料结果却出乎预料,原有同位置数据被后写入数据覆盖。
这里可以使用一个小技巧,首先将可能被覆盖的文件取出,放在另一个文件缓冲区内。接着再写入指定数据。最后再把第一步取出的缓冲区数据写入原文件末尾。源代码如下:

#include <stdio.h>

void main()
{
  FILE* pMyfile,pFileBak;
  char list[30];
  char buf[30];
  char insert[10];
  int i,j;
  long lOffset;

  for(i=0;i<20;i++){
    list[i]='a'+i;
  }

  for(j=0;j<10;j++){
    insert[j]='A'+j;
  }

  lOffset=10;
  pMyfile=fopen("txt1.txt","w+");
  fwrite(list,sizeof(char),20,pMyfile);
 
  fseek(pMyfile, -lOffset,SEEK_END);
  fread(buf,sizeof(char),lOffset,pMyfile);

  fseek(pMyfile,-lOffset,SEEK_END);
  fwrite(insert,sizeof(char),10,pMyfile);

  fseek(pMyfile,0,SEEK_END);
  fwrite(buf,sizeof(char),10,pMyfile);
  fclose(pMyfile);
}

当然,这样的操作会浪费内存空间,目前也只是权宜之计。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有