如何编程精确修改、删除二进制文件中字节?

乐水公司 发布于 03/12 11:53
阅读 447
收藏 0

我试过调用fseek,fputc ,putc,都只是把字符写到最后,无法精确修改、删除文件中间的字节。

加载中
0
zwcloud
zwcloud

看来你对c的io库函数还不清楚,去看看fseek等等函数的用法吧。

0
小小phper
小小phper

修改容易,删除不太容易,小文件还好,大文件得靠自己本事了,用上分块缓存啥的

0
乐水公司
乐水公司

还是要看官方文档呀!上 en.cppreference.com查。改了一下例子。知道了!
 

#include <stdio.h>
#include <stdlib.h>
 int main(void)
{
     #define SIZE 5
    double A[SIZE] = {1.,2.,3.,4.,5.};
    double C[2]={8.,9.};
    FILE * fp = fopen("test.bin", "wb");
    fwrite(A,sizeof(double),SIZE,fp);
    if (fseek(fp,sizeof(double)*2L,SEEK_SET) != 0)
    {
       if (ferror(fp))
       {
          perror("fseek()");
          fprintf(stderr,"fseek() failed in file %s at line # %d\n", __FILE__,__LINE__-5);
          exit(EXIT_FAILURE);
       }
    }
     fwrite(C,sizeof(double),2,fp);
    rewind(fp);
    fclose (fp);
    double B[SIZE];
    fp = fopen("test.bin","rb");
    fread(B,sizeof(double),SIZE,fp);   
    for(int i=0;i<SIZE;i++)
    printf("B[%d]=%.1f\n",i, B[i]);                        
    fclose(fp);
    return EXIT_SUCCESS;
}

 

0
郭里奥

java.io.RandomAccessFile 就可以解决这个问题

 

0
临风ivy
临风ivy

java.nio.channels.AsynchronousFileChannel#write方法:

public abstract <A> void write(ByteBuffer src,
                               long position,
                               A attachment,
                               CompletionHandler<Integer,? super A> handler);

第二个参数就是从哪个位置开始写。

返回顶部
顶部