对文件的复制的方法
第一种方法:
一个字节一个字节的复制
#include<stdio.h>
int main()
{
FILE *fp = fopen("./1.jpg", "rb");
if(fp == NULL)
{
perror("Error");
}
FILE *fq = fopen("./2.jpg", "wb");
if(fq == NULL)
{
perror("Error");
}
char ch;
rewind(fp);
while(1)
{
if(feof(fp) != 0)
{
break;
}
ch = fgetc(fp);
fputc(ch, fq);
}
return 0;
}
用feof对文件进行判断,如果遍历到文件末尾则会返回非0的正数,那我们就可以用这个函数作为判断条件,如果feof的返回值是非0的正数,则跳出死循环,如果没到文件末尾则将文件1的内容复制到文件2
第二种方法
可以创建一个中间指针,并申请一个文件1的大小空间,然后通过指针将文件1的内容复制到文件2
#include<stdio.h>
#include<stdlib.h>
int main()
{
FILE *fp = fopen("./1.jpg", "rb");
if(fp == NULL)
{
perror("Error");
}
FILE *fq = fopen("./2.jpg", "wb");
if(fq == NULL)
{
perror("Error");
}
fseek(fp, 0, 2);
int i = ftell(fp);
rewind(fp);
char *p = (char *)malloc(i);
fread(p, 1, i, fp);
fwrite(p, 1, i, fq);
fclose(fp);
fclose(fq);
return 0;
}
符号常量
__LINE__表示行号
__FILE__表示路径
__DATE__表示日期(月、日、年)
__TIME__表示时间
我们可以用这四个符号常量去写log日志,我们就可以看到文件的属性,方便后面回顾
#include<stdio.h>
int add(int a, int b);
int sub(int a, int b);
int mul(int a, int b);
int div(int a, int b);
int mod(int a, int b);
int main()
{
int a = 10;
int b = 20;
FILE *fp = fopen("./20220921.log", "w+");
fprintf(fp, "line:%d %d\n", __LINE__, add(a, b));
fprintf(fp, "------------------\n");
fprintf(fp, "file:%s %d\n", __FILE__, sub(a, b));
fprintf(fp, "------------------\n");
fprintf(fp, "date:%s %d\n", __DATE__, mul(a, b));
fprintf(fp, "------------------\n");
fprintf(fp, "time:%s %d\n", __TIME__, div(a, b));
fprintf(fp, "------------------\n");
fprintf(fp, "line:%d\nfile:%s\ndate:%s\ntime:%s\ncount:%d\n", __LINE__, __FILE__, __DATE__, __TIME__, mod(a, b));
fclose(fp);
return 0;
}
int add(int a, int b)
{
return a + b;
}
int sub(int a, int b)
{
return a - b;
}
int mul(int a, int b)
{
return a * b;
}
int div(int a, int b)
{
return a / b;
}
int mod(int a, int b)
{
return a % b;
}