#include <stdio.h>
#include <string.h>
#include <errno.h>
#include< stdlib.h>
#define MAXSIZE 2048
int main(int agrc ,char ** agrv[ ])
{
FILE *from_fd;
FILE * to_fd;
long file_len ;
char buffer[MAXSIZE];
char *ptr;
if(3!= agrc) //当操作数不等于3时报错并提示用法
{
fprintf(stderr,"%s用法 :源文件 目标文件",agrv[0]);
exit(1);
}
if((from_fd=fopn(agrv[1],"rb")) ==NULL)
{
fprintf(stderr,"打开 %s Error:%s",agrv[1],strerror(errno)); //打开源文件失败报错
exit(1);
}
if((to_fd=fopen (agrv[2],"wb")) == NULL)
{
fprintf(stderr,"打开 %s Error:%s",agrv[2],strerror(errno)); //打开目标文件失败报错
exit(1);
}
fseek(from_fd,0L,SEEK_END); //测文件长度
file_len=ftell(from_fd);
fseek(from_fd,0L,SEEK_SET);
printf("文件大小 %ld\n",file_len);
while(!feof(from_fd)) //没到文件尾执行循环
{
fread(buffer,MAXSIZE,1,from_fd); //读源文件
if(MAXSIZE>= file_len)
{
printf("一次写完了\n");
fwrite(buffer,file_len,1,to_fd);
}
else
{
printf("写了%ld",MAXSIZE);
fwrite(buffer,MAXSIZE,1,to_fd);
file_len-=MAXSIZE;
printf("还剩下%ld",file_len);
}
memset(buffer,0,MAXSIZE); //将已读文件置零处理,之后执行下次读写
}
fflush(to_fd); // 将缓存区的中所有未写的数据全部写到文件中
fclose(from_fd);
fclose(to_fd);
exit(0);
}