文件指针 FILE *pf 打开函数 fopen 关闭函数 fclose
fgetc 从文件一次读取一个字符
fputc 从文件一次输出一个字符
fgets 从文件读取一串字符
fputs 从文件输出一串字符
fread 从文件选定读取多少内容
fwrite 从文件选定输出多少内容
r 打开只读文件,文件不存在时不会创建 ( fgetc fgets)
w 打开只写文件,文件不存在时会创建一个 ,打开后旧内容会清空 ( fputc fputs)
a 打开添加文件,会添加在文件末尾,文件不存在时会创建一个
r+ 打开可读写文件,不没有会创建
w+ 打开可读写文件,没有会创建
a+ 打开可读写文件,没有会创建
void test_r()
{
FILE *pf=NULL;
pf=fopen("test.txt", "r");// 没有这个文件,并且不会创建,
char ch; // 然后手动添加这个文件 ,内容为abcdef
ch=fgetc(pf);
printf("%c\n", ch); //只有在只读模式下才能获取文件内内容
char str[20];
fgets(str,20,pf);
printf("%s", str); //读取单个字符后光标移动,再读字符串时,第一个就读不到
fclose(pf);
}
void test_w()
{
FILE *pf=NULL;
pf=fopen("test_w.txt","w");//没有这个文件时,会创建一个
/*
以w只读方式打开文件后,会清空旧文件,再写新文件
*/
fputc('j',pf); //写入单个字符
char str[20]="my name is jack";
fputs(str,pf); //写入字符串,但是会在j之后
printf("返回值为%d",fputs(str,pf)) ;//返回0,写入成功,返回-1失败
fclose(pf);
}
void test_a()
{
FILE *pf=NULL;
pf=fopen("test_a.txt", "a"); //没有文件会创建一个
char str[20]="my name is jos";
fputs(str,pf); //与w打开写入先清空旧内容不同,a是不清空旧内容在旧内容后面添加
printf("返回值为%d",fputs(str,pf));//返回0,写入成功
}
int main()
{
//test_r();
//test_w();
test_a();
return 0;
}
r+ 可读可写,但不能自动创建文件
先读后写时:当光标在文件末尾时,可以写入
当光标在文件中间时,无法写入
当光标在文件开头时,写入多少内容就会覆盖多少内容
先写后读时:文件为空时,直接写入
文件有内容时,要写入的内容超过原有文件,则完全覆盖,不超过则从文件开始的 地方覆盖写入内容
w+ 可写可读,可以自动创建文件
一般常用于先写后读,但要借助rewind( pf )函数,将光标1从文件末尾移动到开, 头 才能够实现读取功能
fscanf ( pf," %s ", str ) 从文件指针pf指向的文件中读取字符串到str数组中
fprintf ( pf, " %s ", str ) 从str数组打印内容到文件指针pf指向的文件
sscanf ( str," %s ", arr ) 从缓冲区str中读取内容到arr数组中
sprintf ( str," %s ", arr ) 从arr数组中打印内容到缓冲区str中
feof()函数
功能:判断是否到达文件末尾
未到文件末尾,返回0
到达文件末尾,返回非零
文件结束后,存在一个结束标志( EOF ),数值是-1
while(!feof(pf))
{
printf("feof(pf)的返回值:%d ",feof(pf));
str[i]=fgetc(pf);
printf("%c\n",str[i]);
i++;
}
rewind( pf )函数 将光标移动到文件开头的位置
ftell(pf) 函数 告诉光标距离文件开头的字节数
printf("ftell()-01返回光标距离开始的位置:%d\n",ftell(pf)); //0
fgets(str01,19,pf);
printf("ftell()-01返回光标距离开始的位置:%d\n",ftell(pf)); //18
printf("%s\n",str01);
fseek ( ; ; ;) 函数 自定义设置标位置
参数1:文件指针 pf
参数2:偏移量 例50(向右偏移),-50(向左偏移)
参数:参考点 SEEK_SET 开头 SEEK_COR SEEK_END末尾
fseek(pf,5,SEEK_SET);
printf("ftell()-01返回光标距离开始的位置:%d\n",ftell(pf));//5
fgets(str01,19,pf);
printf("ftell()-01返回光标距离开始的位置:%d\n",ftell(pf));//19
printf("%s\n",str01);
fseek(pf,-5,SEEK_END);
printf("ftell()-01返回光标距离开始的位置:%d\n",ftell(pf));//14
fgets(str01,19,pf);
printf("ftell()-01返回光标距离开始的位置:%d\n",ftell(pf));//19
printf("%s\n",str01);