fopen(const char * path,const char * mode); -- path: 文件路径,如:"F:\Visual Stdio 2012\test.txt" -- mode: 文件打开方式,例如: "r" 以只读方式打开文件,该文件必须存在。 "w" 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。 "w+" 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。 "a" 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留) "a+" 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。(原来的EOF符不保留) "wb" 只写打开或新建一个二进制文件,只允许写数据。 "wb+" 读写打开或建立一个二进制文件,允许读和写。 "ab" 追加打开一个二进制文件,并在文件末尾写数据。 "ab+"读写打开一个二进制文件,允许读,或在文件末追加数据。 --返回值: 文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno中。
size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream); -- buffer:指向数据块的指针 -- size:每个数据的大小,单位为Byte(例如:sizeof(int)就是4) -- count:数据个数 -- stream:文件指针
size_t fread(void *buffer, size_t size, size_t count, FILE *stream); -- buffer:指向数据块的指针 -- size:每个数据的大小,单位为Byte(例如:sizeof(int)就是4) -- count:数据个数 -- stream:文件指针
1 #include <stdio.h> 2 typedef struct student ------------------------------- //定义一个结构体并重命名为stu 3 { 4 int id; 5 char name[32]; 6 }stu; 7 stu stu1; -----------------------------------------------//定义结构体类型变量stu1 8 void write_file(); 9 void read_file(); 10 11 int main() 12 { ----------------输入之后注释掉14-22行依旧能输出,因为fread 13 14 printf("stu id:\n");-------------------------------------//给stu1赋值 15 scanf("%d",&stu1.id); 16 getchar(); 17 18 printf("stu name:\n"); 19 scanf("%s",stu1.name); 20 getchar(); 21 22 write_file();--------------------------------------------//调用write_file函数 23 24 25 read_file();----------------------------------------------//调用read_file函数 26 printf("stu1.id = %d\n",stu1.id); 27 printf("stu1.name = %s\n",stu1.name); 28 29 30 } 31 32 void write_file()----------------------------------------------//定义write_file函数 33 { 34 FILE *fp;--------------------------------------------------//定义文件指针 35 int ret = -1; 36 37 fp = fopen("stu.txt","w+");-----------------------------------//(“文件路径”,“打开方式”) 38 if(fp == NULL) 39 { 40 printf("open file error!\n"); 41 return;----------------------------------------------------//打开错误,就结束函数 42 } 43 44 ret = fwrite(&stu1,sizeof(stu),1,fp);---//写入内存块中的数据到硬盘(本地文件),(数据块地址,每个数据大小,数据个数,文件指针) 45 printf("fwrite_file_ret = %d\n",ret); 46 if(ret <= 0) 47 { 48 printf("write error!\n"); 49 return; 50 } 51 52 fclose(fp); 53 54 return; 55 56 } 57 58 59 void read_file()------------------------------------//定义read_file()函数 60 { 61 FILE *fp;--------------------------------------//定义文件指针 62 int ret = -1; 63 64 fp = fopen("stu.txt","r+"); 65 if(fp == NULL) 66 { 67 printf("open file error!\n"); 68 return; 69 } 70 71 72 ret = fread(&stu1,sizeof(stu),1,fp);---//从文件中读取数据,(数据块地址,每个数据大小,数据个数,文件地址即指针) 73 printf("ret_file_ret = %d\n",ret); 74 75 fclose(fp);---------------------------------//每次打开文件记得关闭 76 }