700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 【C语言】 文件指针编程应用

【C语言】 文件指针编程应用

时间:2024-02-20 03:40:09

相关推荐

【C语言】 文件指针编程应用

目录

一:r+ 文件操作

二:w+ 文件操作

三:文件的打开

3.1 CFile.h

3.2 CFile.c

3.3 main.c

四:文件的写入

一:r+ 文件操作

r+ :打开一个存在的文件,示例如下:

#include<stdio.h>#include<windows.h> //exit(0)int main(){FILE *pf=NULL; //文件指针pf = fopen("menu.txt","r+");//r+ 打开一个存在的文件if(pf==NULL){printf("open fail\n");//open failexit(0);}return 0;}

二:w+ 文件操作

w+ :文件不存在 则会创建文件

文件存在:覆盖掉 原有文件

w+ 打开文件操作示例如下:

#include<stdio.h>#include<windows.h> //exit(0)int main(){FILE *pf=NULL; //文件指针pf = fopen("menu.txt","w+");//w+ 文件不存在会创建文件 文件存在:覆盖掉if(pf==NULL){printf("open fail\n");//Press any key to continue 会创建文件exit(0);}return 0;}

三:文件的打开

3.1 CFile.h

#ifndef CFILE_H#define CFILE_H#include<stdio.h> // 用到FILE结构体//保证打开一个文件 char name[20] char name[ ] char* nameFILE *f_open(char *name);#endif

3.2 CFile.c

#include"CFile.h"//保证打开一个文件 FILE *f_open(char *name){FILE *fp = NULL;fp = fopen(name,"r+");if(fp==NULL) //不存在{fp = fopen(name,"w+"); //就创建}}

3.3 main.c

3.3.1 main.c

w+ 若是文件不存在则会创建文件 【但要确认文件夹存在】

#include<stdio.h>#include<windows.h> //exit(0)#include"CFile.h"int main(){FILE *pf=NULL; //文件指针pf = f_open("menu.txt"); //结果 open success,文件所在地址:0042AAE8// w+ 文件不存在创建文件 但要确认文件夹存在 if(pf==NULL){printf("open fail\n");exit(0);}else{printf("open success,文件所在地址:%p\n",pf);//open success,文件所在地址:0042AAE8}return 0;}

3.3.2 main.c

文件不存在创建文件 但要确认文件夹存在 以下示例中的data文件夹不存在,打开文件失败

#include<stdio.h>#include<windows.h> //exit(0)#include"CFile.h"int main(){FILE *pf=NULL; //文件指针pf = f_open("data/menu.txt"); //结果 open fail// w+ 文件不存在创建文件 但要确认文件夹存在 if(pf==NULL){printf("open fail\n");//open failexit(0);}else{printf("open success,文件所在地址:%p\n",pf);}return 0;}

解决:自己在工程目录下创建data文件夹

3.3.3 main.c

文件不存在则会创建文件 但要确认文件夹存在 以下示例中 D盘一定存在,文件打开成功

#include<stdio.h>#include<windows.h> //exit(0)#include"CFile.h"int main(){FILE *pf=NULL; //文件指针pf = f_open("D:/menu.txt"); // 结果open success,文件所在地址:0042AAE8// w+ 文件不存在创建文件 但要确认文件夹存在 if(pf==NULL){printf("open fail\n");exit(0);}else{printf("open success,文件所在地址:%p\n",pf);//open success,文件所在地址:0042AAE8}return 0;}

四:文件的写入

4.1 main.c

打开文件并写入文件

#include<stdio.h>#include<windows.h> //exit(0)#include"CFile.h"typedef struct menu_t//定义菜谱结构体{int id;char name[20];double price;}MENU_T;int main(){FILE *pf=NULL; //文件指针MENU_T menu = {1001,"水煮鱼",59.8};//定义结构体// w+ 文件不存在创建文件 但要确认文件夹存在pf = f_open("D:/menu.txt"); // 结果 open success,文件所在地址:0042AAE8if(pf==NULL){printf("open fail\n");exit(0);}else{printf("open success,文件所在地址:%p\n",pf);}//光标定位在文件末尾fseek(pf,0,SEEK_END);//1.写入内容的地址 2.写入的大小 3.几块 4.文件指针fwrite(&menu,sizeof(MENU_T),1,pf);fclose(pf);return 0;}

4.2 main.c 再写入 menu1 至文件中

#include<stdio.h>#include<windows.h> //exit(0)#include"CFile.h"typedef struct menu_t{int id;char name[20];double price;}MENU_T;int main(){FILE *pf=NULL; //文件指针MENU_T menu = {1001,"水煮鱼",59.8};MENU_T menu1 = {1002,"水煮肉片",59.8};// w+ 文件不存在创建文件 但要确认文件夹存在pf = f_open("D:/menu.txt"); // 结果open success,文件所在地址:0042AAE8if(pf==NULL){printf("open fail\n");exit(0);}else{printf("open success,文件所在地址:%p\n",pf);}//光标定位在文件末尾fseek(pf,0,SEEK_END);//1.写入内容的地址 2.写入的大小 3.几块 4.文件指针fwrite(&menu1,sizeof(MENU_T),1,pf);fclose(pf);return 0;}

4.3 mian.c 若定位文件开头写入文件则原数据会被覆盖

fseek(pf,0,SEEK_SET);

#include<stdio.h>#include<windows.h> //exit(0)#include"CFile.h"typedef struct menu_t{int id;char name[20];double price;}MENU_T;int main(){FILE *pf=NULL; //文件指针MENU_T menu = {1001,"水煮鱼",59.8};MENU_T menu1 = {1002,"水煮肉片",59.8};MENU_T menu2 = {1003,"水煮田鸡",59.8};// w+ 文件不存在创建文件 但要确认文件夹存在pf = f_open("D:/menu.txt"); // 结果open success,文件所在地址:0042AAE8if(pf==NULL){printf("open fail\n");exit(0);}else{printf("open success,文件所在地址:%p\n",pf);}//光标定位在文件开始fseek(pf,0,SEEK_SET);//1.写入内容的地址 2.写入的大小 3.几块 4.文件指针fwrite(&menu2,sizeof(MENU_T),1,pf);fclose(pf);return 0;}

4.4 main.c 通过偏移量,使原数据不被覆盖

fseek(pf,2*sizeof(MENU_T),SEEK_SET);

#include<stdio.h>#include<windows.h> //exit(0)#include"CFile.h"typedef struct menu_t{int id;char name[20];double price;}MENU_T;int main(){FILE *pf=NULL; //文件指针MENU_T menu = {1001,"水煮鱼",59.8};MENU_T menu1 = {1002,"水煮肉片",59.8};MENU_T menu2 = {1003,"水煮田鸡",59.8};// w+ 文件不存在创建文件 但要确认文件夹存在pf = f_open("D:/menu.txt"); // 结果open success,文件所在地址:0042AAE8if(pf==NULL){printf("open fail\n");exit(0);}else{printf("open success,文件所在地址:%p\n",pf);}//光标定位在文件开始 偏移量 +向右偏移 -向左偏移fseek(pf,2*sizeof(MENU_T),SEEK_SET);//1.写入内容的地址 2.写入的大小 3.几块 4.文件指针fwrite(&menu,sizeof(MENU_T),1,pf);fclose(pf);return 0;}

4.5 main.c 再写入一个不覆盖结构体数据至文件中

fseek(pf,3*sizeof(MENU_T),SEEK_SET);

#include<stdio.h>#include<windows.h> //exit(0)#include"CFile.h"typedef struct menu_t{int id;char name[20];double price;}MENU_T;int main(){FILE *pf=NULL; //文件指针MENU_T menu = {1001,"水煮鱼",59.8};MENU_T menu1 = {1002,"水煮肉片",59.8};MENU_T menu2 = {1003,"水煮田鸡",59.8};MENU_T menu3 = {1004,"水煮1",59.8};// w+ 文件不存在创建文件 但要确认文件夹存在pf = f_open("D:/menu.txt"); // 结果open success,文件所在地址:0042AAE8if(pf==NULL){printf("open fail\n");exit(0);}else{printf("open success,文件所在地址:%p\n",pf);}//光标定位在文件开始 偏移量 +向右偏移 -向左偏移fseek(pf,3*sizeof(MENU_T),SEEK_SET);//1.写入内容的地址 2.写入的大小 3.几块 4.文件指针fwrite(&menu3,sizeof(MENU_T),1,pf);fclose(pf);return 0;}

深入学习,文件指针,参考以下文章

文件指针 基础

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。