1.文件操作简介
文件在读写之前,需要先打开文件;读写之后,需要及时关闭文件。
打开文件
FILE* fopen(char* filename,char* mode);
mode为打开模式。
关闭文件
int fclose(char* filename);
如果成功返回0,否则返回EOF。
FILE *fp1,*fp2;//定义文件指针
//打开文件
fp1 = fopen("C:\\Users\\Alexe\\Desktop\\SQL.txt","w");
2.文件操作模式表
3.文件写入
写文件
putc()
作用:用于向文件写入一个字符
putc()
作用:用于向文件写入一个字符串
fprintf()
作用:格式化写入文件
函数原型:int fprintf(FILE* file,const char *format,...);
从字符串中获取数据,例如:
fprintf(fp,"I am a %s,I am %d years old.","Student",18);
fwrite
作用:写二进制文件
函数原型: unsigned int fwrite(const void* str,usigned int size,unsigned int count,FILE* file);
str为带写入数据的指针,size为待写入数据的字节数,count为待写入数据个数。
4.文件读取
读文件
fgetc()
从文件中读取一个字节
char a = fgetc(fp);
fgets()
从文件中读取指定字符串
char* fgets(char* buf,int maxCount,FILE* file);
buf为一个字符数组,用来存储读到的字符串。
fscanf()
格式化读取数据
int fscanf(FILE* file,const char* format,...);
其中format表示文件中的i字符串输出时遵循的格式;
举例说明:
fscanf(fp,"%s%d",work,&age);
从文件fp中读取一个字符串和一个整形数据,分别复制给work和age。需要注意的是,因为数据只能从实参传递给形参,其中的参数应为指针变量,所以需要对整形变量age进行取地址操作。
fread
读取二进制文件
函数原型:unsigned int fread(void* dstBuf,usigned int elementSize,unsigned int count,FILE* file);
5.文件位置指针
fseek()
fseek()的作用是将文件位置指针移动到指定位置
int fseek(FILE* fp,long offset,int origin);
参数offset表示以参数origin为基准使文件位置指针移动的偏移量;
参数origin表示文件位置指针的起始位置:
SEEK_SET:该参数对应的数值为0,表示从文件起始位置开始偏移。
SEEK_CUR:该参数对应额度数值为1,表示相对文件位置指针当前所在位置进行偏移。
SEEK_END:该参数对应的值为2,表示相对文件末尾进行偏移。
rewind()
将文件位置指针移动到文件的开头
void rewind(FILE* fp);
ftell()
获取文件位置还真当前指向的位置
long ftell(FILE* fp);
6.案例代码展示
打开文件
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(){
//打开文件
FILE* fp;
//r为只读模式
fp = fopen("C:\\Users\\Alexe\\Desktop\\XwSQL.txt","r");
if(fp==NULL){
printf("File open error");
exit(0);
}
printf("File has open! ");
}
将数据保存在文本文件中
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct Student{
int sno;//学号
char name[20];//姓名
int age;
char sex[5];
}Stu;
int main(){
FILE *fp1,*fp2;
Stu stu;
int no = 1001;
char name[20]="zhangsan";
int age = 19;
char sex[5]="male";
//文本操作
//w为只写模式
fp1 = fopen("C:\\Users\\Alexe\\Desktop\\XwSQL.txt","w");
if(fp1==NULL){
printf("文件无法打开!");
return -1;
}
//写入
fputs(name,fp1);
fputc('\n',fp1);
fprintf(fp1,"%d %s %d %s\n",no,name,age,sex);
fclose(fp1);
}
读取文件中的数据
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct Student{
int sno;//学号
char name[20];//姓名
int age;
char sex[5];
}Stu;
int main(){
FILE *fp1,*fp2;
int no,age;
char name[20];
char sex[5];
char c;
Stu s;
fp1 = fopen("C:\\Users\\Alexe\\Desktop\\XwSQL.txt","r");
if(fp1==NULL){
printf("文件打开失败!");
return -1;
}
printf("文本文件:\n");
fgets(name,10,fp1);
printf("第一行:\n%s\n",name);
//格式化输出
fscanf(fp1,"%d%s%d%s",&no,name,&age,&sex);
printf("第二行:\n%-5d%-10s%-5d%-5s\n\n",no,name,age,sex);
fclose(fp1);
}
删除指定信息