重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
创新互联建站专注于吉隆网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供吉隆营销型网站建设,吉隆网站制作、吉隆网页设计、吉隆网站官网定制、微信小程序服务,打造吉隆网络公司原创品牌,更为您提供吉隆网站排名全网营销落地服务。创新互联专注于阿拉山口网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供阿拉山口营销型网站建设,阿拉山口网站制作、阿拉山口网页设计、阿拉山口网站官网定制、成都微信小程序服务,打造阿拉山口网络公司原创品牌,更为您提供阿拉山口网站排名全网营销落地服务。
文件打开与关闭 fopen函数打开数据文件
fopen函数的调用方式为:fopen(文件名,使用方式);
例如:fopen("student.txt", "r"); // 以只读的方式打开student.txt文件
打开文件的常用方式:
"r"(只读):只能从文件中读数据,该文件必须先存在,否则打开失败 "w"(只写):只能向文件写数据,若指定的文件不存在则创建它,如果存在则先删除它再重建一个新文件 "a"(追加):向文件增加新数据(不删除原有数据),若文件不存在则打开失败,打开时位置指针移到文件末尾 "rb"(只读):只能从文件中读数据,该文件二进制文件必须先存在,否则打开失败 "wb"(只写):向文件写数据,若指定的二进制文件不存在则创建它,如果存在则先删除它再重建一个新文件 "ab"(追加):向二进制文件尾部添加数据,若文件不存在则打开失败,打开时位置指针移到文件末尾 "r+":可读/写数据,该文件必须先存在,否则打开失败 "w+":可读/写数据,用该模式打开新建一个文件,先向该文件写数据,然后可读取该文件中的数据 "a+":可读/写数据,原来的文件不被删去,位置指针移到文件末尾 打开二进制文件的模式与打开文本文件的含义是一样的,不同的是模式名称里面多一个字母'b’,以表
常用一下方式打开一个文件:
if((fp = fopen("fishc.txt", "r")) == NULL){ printf("can not open fishc1.txt"); system("pause"); }fclose函数打开数据文件
关闭文件用fclose函数, fopen与fclose是成对出现的,有fopen就要有fclose。
fclose函数调用的一般形式为:fclose(文件指针);
例如:fclose(fp);
函数名 | 调用形式 | 功能 | 返回值 |
---|---|---|---|
fgetc | fgetc(fp) | 从fp指向的文件读入一个字符 | 读取成功,返回所读的字符,失败则返回文件结束标志EOF(-1) |
fputc | fputc(ch, fp) | 把字符ch写到文件指针变量fp所指的文件中 | 写入成功,返回所写的字符, 写入失败返回EOF(-1) |
fputc应用
fgetc应用
函数名 | 调用形式 | 功能 | 返回值 |
---|---|---|---|
fgets | fgets(str, n, fp) | 从fp指向的文件读入一个长度为(n-1)的字符串,存放在字符数组str中 | 读取成功,返回地址str,失败则返回NULL |
fputs | fputs(str, fp) | 把str所指向的字符串写到文件指针变量fp所指向的文件中 | 写入成功,返回0, 写入失败返回非0 |
fputs应用 | |||
fgets应用 | |||
调用形式:
fread(buffer, size, count, fp); fwrite(buffer, size, count, fp); 其中: buffer: 是一个地址,对于fread来说,它是用来存放从文件读入的数据的存储区的地址。对fwrite来说,要把此地址开始的存储区中的数据向文件输出。 size:要读些的字节数 count:要读些多少个数据项(每个数据项长度为size) fp: FILE类型的指针
fwrite示例:
#include#include #include #define SIZE 4 struct Student{ char name[10]; int num; int age; char addr[15]; }stu[SIZE]; // 在这里声明相当于全局变量 void write(){ int i; FILE *fp; // 文件指针 if((fp = fopen("students", "wb")) == NULL){ // 为了写入数据,打开一个二进制文件 printf("read error!\n"); exit(0); } for(i = 0; i< SIZE; i++){ fwrite(&stu[i], sizeof(struct Student), 1, fp); // 从文件中读取一个数据块,读写的时候是以二进制形式进行的 } fclose(fp); } void main(){ int i; for(i = 0; i< SIZE; i++){ // 注意%s对应项不用再取地址符号&了,应为本身就是地址,向int,float都要有&取地址符号 scanf("%s %d %d %s", stu[i].name, &stu[i].age, &stu[i].num, stu[i].addr); } write(); }
fread示例:
#include随机读写数据文件 rewind函数使文件位置标记指向文件开头#include #include #define SIZE 4 struct Student{ char name[10]; int num; int age; char addr[15]; }stu[SIZE]; // 在这里声明相当于全局变量 void read(){ int i; FILE *fp; // 文件指针 if((fp = fopen("students", "rb")) == NULL){ // 为了读取数据,打开一个二进制文件 printf("read error!\n"); exit(0); } for(i = 0; i< SIZE; i++){ fread(&stu[i], sizeof(struct Student), 1, fp); // 从文件中读取一个数据块,读写的时候是以二进制形式进行的 } fclose(fp); } void main(){ int i; read(); for(i = 0; i< SIZE; i++){ printf("%s %d %d %s\n", stu[i].name, stu[i].age, stu[i].num, stu[i].addr); } }
rewind函数的作用是使文件位置标记重新返回文件的开头,此函数没有返回值。
例题:有一个文件,内有一些信息,要去第一次将它的内容显示在屏幕上,第二次把它复制到另一个文件上. #includefseek函数改变文件位置标记#include void main(){ FILE *fp1, *fp2; fp1 = fopen("student.txt", "r"); // 打开需要读的文件 fp2 = fopen("student_copy.txt", "w"); // 打开需要写入的文件 while(!feof(fp1)){ // 逐个读入字符并输出到屏幕 char ch = fgetc(fp1); putchar(ch); } rewind(fp1); // while(!feof(fp1)){ char ch = fgetc(fp1); fputc(ch, fp2); } fclose(fp1); fclose(fp2); }
fseek函数的调用形式:fseek(文件类型指针,位移量,起始点)
起始点 | 名字 | 用数字代表 |
---|---|---|
文件开始位置 | SEEK_SET | 0 |
文件当前位置 | SEEK_CUR | 1 |
文件末尾位置 | SEEK_END | 2 |
#include#include #include #define SIZE 4 struct Student{ char name[10]; int num; int age; char addr[15]; }; // 在这里声明相当于全局变量 void main(){ struct Student student; FILE *fp; // 文件指针 if((fp = fopen("students", "rb")) == NULL){ // 这个是一定要进行判断的,打开一个只读二进制文件 printf("read error!\n"); exit(0); } // i * sizeof(struct Student)表示去第i+1个数据,和数组相似,i像数组的下标 fseek(fp, 3*sizeof(struct Student), 0); fread(&student, sizeof(struct Student), 1, fp); printf("%s %d %d %s", student.name, student.age, student.num, student.addr); }
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧