一、
fwrite 既可以处理二进制文件,也可以处理文本文件(修改图片中内容)
#include <stdio.h>
#include <iostream>
using namespace std;
struct STU{
int no;
char name[10];
int age;
};
void write(){
struct STU stu[3] = {
12,"zhangsan",20,
30,"lily",30,
16,"amiy",40
};
FILE *fp = fopen("abc.c" , "wb");
if(!fp){
perror("fopen error");
return;
}
int ret = fwrite(&stu[0] , 1 , sizeof(struct STU)*3 , fp );
if(ret == 0){
cout << "write error" << endl;
return;
}
printf("ret = %d\n" , ret);
fclose(fp);
}
void read(){
FILE *fp = fopen("abc.c" , "rb");
if(fp == NULL){
perror("fopen error");
return;
}
struct STU buf[3];
int ret = 0;
int i = 0;
while(1){
ret = fread(&buf[i] , 1 , sizeof(struct STU) , fp);
if(ret == 0){
printf("读完了");
break;
}
printf("ret == [%d]\n",ret);
printf("no = [%d] , name = [%s] , age = [%d] \n", buf[i].no , buf[i].name , buf[i].age);
i++;
}
fclose(fp);
}
int main(){
// write();
read();
system("pause");
return 0;
}
二、大文件拷贝
#include <stdio.h>
#include <iostream>
using namespace std;
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
void wr(){
char buf[100];
int ret;
FILE *fp_r = fopen("C:\\Users\\86176\\Desktop\\02-单向链表企业版-初始化、插入和遍历实现_北京修正黑马C++就业课.avi" , "rb");
FILE *fp_w = fopen("paste.txt" , "wb");
if(fp_r == NULL || fp_w == NULL){
perror("fopen error");
return;
}
while(1){
memset(buf , 0 , sizeof(buf));
if (fread(buf , 1 , sizeof(buf) , fp_r ) == 0) {
printf("读完了\n");
break;
}
ret = fwrite(buf , 1 , sizeof(buf) , fp_w );
if(ret < 0){
cout << "fputs error" << endl;
return;
}
// else if(ret == 0){
// cout << "写入文件完成" <<endl;
// break;
// }
}
fclose(fp_w);
fclose(fp_r);
}
int main(){
wr();
system("pause");
return 0;
}