我想更改一个二进制文件里面特定位置的一个标志位(不在文件尾而是在文件中间),我直接写进去发现文件其它的信息被更改了(我用的是标准C)。我想先把文件里面的内容读到一个缓冲区里再做更改,但总觉这样太麻烦,而且文件一大的话效率就非常低了。请问哪位知道有什么更好的方法可以更改?

解决方案 »

  1.   

    1、以读写方式打开文件
      FILE *fp;
      fp = fopen( FileName, "rb+);2、将文件指针定位到要写的地方
      fseek( fp, Offset, SEEK_SET);3、读出原内容,并修改之
      fread( buffer, sizeof(char), n, fp );
      修改buffer内容4、将文件重新定位到原位置
       fseek(fp,Offset, SEEK_SET)5、重写数据
       fwrite(buffer, sizeof(char), n, fp );
      

  2.   

    谢谢
     leavesxy(leaves_xy) 
    一定给分!
      

  3.   

    你的文件有多大?
    如果大于2.1G,那楼上的程序还得变一变,用绝对地址跳不到2.1G以后,不过可以用两次想对地址跳转跳到,但是对4.2G以上的也不行。
    文件太大的话,只能调用<io.h>里的那些更低级的函数,比如_lseeki64,可以使用64位的定点数寻址,不过速度慢得多。
    我以前做过一个超大文件的读写操作,甚至有上10G的大文件,简直惊人!