C语言文件操作将一个文件内容复制到一个空文件中

操作思路:

1、先开辟一片要读取内容大小的内存空间,确保干净;

2、打开源文件读取需要的内容到开辟的内存空间,读取完毕关闭;

3、打开目标文件将内存空间中的内容,写入目标文件中,写完关闭;

C语言实现:

以下程序主要是操作将一具小于16KB文件+一段16B内容=16KB复制到一个空文件中

#include <stdio.h>
#include <sting.h>
#include <stdib.h>
  
#define BUFSIZE  (16*1024)  //定义宏是为了复用,更易修改程序
#define IMG_SIZE (16*1024)
#define SPL_HEADRE_SIZE 16
#define SPL_HEADER "S5PX210 HEADER  "//16B

int main(int argc,char *argv[])
{
  int BufLen;
  char *Buf,*a;
  FILE *fp;
  int nbytes, fileLen;
  unsingned int count,checksum;
//先判断传入文件个数,如果非等于3个,则终止程序,提示传参
  if(argc!=3)
  {
    printf("Usage:%s<source file><destination file>\n",argv[0]);
    return -1;//return -1;是一种约定俗成的操作,主要用来判断程序运行状态,-1代表不正常
  }
  //申请16KB大小内存-Buffer,先定定义
  Buflen = BUFSIZE;
  Buf = (char *)malloc(BufLen);
  if(!Buf)
  {
    printf("malloc buffer failed\n");
    return -1;
  }
  //将开辟的内存清空,保持干净
  memset(Buf,0x00,BufLen);
 
  
  //打开源文件,读源文件到Buffer
  fp = fopen(argv[1],"rb");
  if(fp==null)
  {
    printf("source file open error\n");
    free(Buf);
    return -1;
  }
  //定位到文件尾
  fseek(fp,0L,SEEK_END);
  //获取文件大小
  fileLen = ftell(fp);
  //定位到文件头
  fseek(fp,0L,SEEK_SET);
  //源文件长度不能超过16KB-16B
  count = (fileLen<(IMG_ZISE - SPL_HEADER_SIZE))?fileLen:(IMG_ZISE - SPL_HEADER_SIZE)
  //内存-Buffer,前16B存放SPL_HEADER
  memcpy(&Buf[0],SPL_HEADEER,SPL_HAEADER_SIZE);
  //读源文件到Buffer[16]之后的内存
  nbytes = fread(Buf +SPL_HAEADER_SIZE,1,count,fp);
  if(nbytes!=count)
  {
    printf("source file read error\n");
    free(Buf);
    fclosed(fp);
    return -1;
  }
  fclosed(fp);
  //计算校验和,从第16字节开始统计Buffer中共有几个1
  a = Buf + SPL_HEADER_SIZE
  for(i = 0,checksum = 0;i<IMG_SIZE-SPL_HEADER_SIZE;i++)
  {
  checksum +=(0x000000FF)&*a++;
  }
  a = Buf+8;
  *((unsigned int *)a) = checksum;
  
  fp = fopen(argdv[2],"wb");
 if(fp==null)
  {
    printf("destination file open error\n");
    free(Buf);
    return -1;
  }
  a = Buf;
  nbyets = fwrite(a,1,BufLen,fp);
  //
  if(nbytes!=BufLen)
  {
   printf("destination file  wirte error\n");
    free(Buf);
    fclosed(fp);
    return -1;
  }
    free(Buf);
    fclosed(fp);
    return 0;
}
原文链接:,转发请注明来源!