二进制文件

读取文件,再写入到另一个文件里面:

1、获取文件大小

1
2
3
4
5
FILE* fp = fopen("T:/img.jpg", "rb");
fseek(fp, 0, SEEK_END);
int size = ftell(fp);
fclose(fp);
cout << "文件大小(指针偏移计算):" << size; // 字节大小

2、读取文件

1
2
3
4
FILE* fp = fopen("T:/img.jpg", "rb");
int* buffer = (int*)malloc(size+4); // 可以改成其他类型也没事,比如 char*
fread(buffer, size, 1, fp);
fclose(fp);

3、写入到另一个文件

1
2
3
FILE* fp = fopen("T:/img1.png", "wb");
fwrite(buffer, size, 1, fp); // 方法一
fclose(fp);

freadwritesize可以更大,不影响结果(表示上限)


实测一张jpg图片:

  • size超过体积,保存的会是size的大小
  • 1/10时:图片只有一半显示,体积也只有1/10
  • 1/4时:上方5/6的部分清晰,剩下的模糊
  • 1/2时:虽然体积只有一半,但是好像一样清晰……

文本文件

读取文本文件

1
2
3
4
FILE *fp = fopen("/tmp/test.txt", "w+");
fprintf(fp, "This is testing for fprintf...\n");
fputs("This is testing for fputs...\n", fp);
fclose(fp); //记得用完关闭文件

写入文本文件

1
2
3
4
5
char buff[255];
FILE *fp = fopen("/tmp/test.txt", "r");
fscanf(fp, "%s", buff); //只有字符串变量前不加‘&’,其他int、double等类型前都要加‘&’符号
fgets(buff, 255, (FILE*)fp); //scanf遇到空格就会断开,gets会读取空格,遇到换行就结束
fclose(fp);