linux下库函数操作之文件复制
程序员文章站
2022-06-10 11:12:49
...
知识点补充:
- ftell()
一个参数,文件指针
功能:获取当前文件指针到开头的字节数
其他知识点看参考上一篇
#include <stdlib.h>
#include <stdio.h>
#define BUFFER_SIZE 50
int main(int argc,char **argv)
{
FILE *from_fd ,*to_fd;//文件指针的定义
long len;
char buffer[BUFFER_SIZE];
int ret;//记录文件读取的长度
if(argc!=3)
{
printf("argument is not enough\n");
return -1;
}
if((from_fd=fopen(argv[1],"a+b"))==NULL)//以追加可读可写的方式打开文件,若文件不存在就新建文件
{
printf("file not exist\n");
return -1;
}
fprintf(from_fd,"hello\n");//为文件写入数据
if((to_fd=fopen(argv[2],"w+b"))==NULL)
{
printf("file not create\n");
return -1;
}
//获取要复制的文件长度
fseek(from_fd,0L,SEEK_END);//把文件指针放置在文件的末尾,然后获取文件的长度
len=ftell(from_fd);//获取文件的长度
fseek(from_fd,0L,SEEK_SET);//
while(!feof(from_fd))//判断文件指针是否到文件末尾
{
//读文件
fread(buffer,BUFFER_SIZE,1,from_fd);//返回一次读取文件的大小
if(bUFFER_SIZE>=len)//若文件长度已经减小至比返回值小,此时已读取完文件
{
fwrite(buffer,len,1,to_fd);
}else
{
fwrite(buffer,BUFFER_SIZE,1,to_fd);
len-=BUFFER_SIZE;//记录还需复制的文件长度
}
bzero(buffer,BUFFER_SIZE);//清空缓冲区的内容
}
fclose(from_fd);
fclose(to_fd);
exit(0);
}
编译及运行
//编译
gcc File_test.c -o test
//运行
./copy_file from.c to.c