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 }