C语言文件操作函数

文件

什么是文件:储存在外部介质上具有名字(文件名)的一组相关数据的集合
文件的作用:保存数据
文件的格式:通过后缀来说明是什么类型,有doc、rmvb、jpg、mp3等类型


文件分类:文本文件和二进制文件
文本文件:保存的时候,每一个字符对应一个字符
二进制文件:按照二进制编码保存的文件
Linux不区分二进制文件和文本文件


文件信息
每一个被使用的文件的信息都存在一个结构体FILE中

打开文件&&关闭文件

FILE *fp//定义文件指针
//fopen("文件名","打开文件方式");//打开文件
fclose(fp);//关闭文件

文件打开方式 含义 如果该文件不存在
r”(只读) 以只读的形式打开文本文件

w”(只写) 以只写模式建立文本文件,若文件存在,则文件长度清零

a” (追加) 以追加的模式(从文件末尾处开始的只写模式)打开或建立文本文件

r+”(读写) 以更新(读写)模式打开文本文件

w+”(读写) 以更新模式建立文本文件,若文件存在则文件清零

a+”(读写) 以追加(从文件末尾处开始写入的更新模式)模式打开或建立文本文件

rb、wb、ab…(末尾加d的,皆为打开二进制文本文件)
fgetc函数
调用形式:fgetc(fp)
功能:从fp指向的文件中读入一个字符
返回值:读成功,返回所读的字符;失败则返回结束标志EOF(即 -1)

#include <stdio.h>
int main()
{
	char a;
	char c;
	FILE *fp;
	//打开文件 
	fp=fopen("C:\\Users\\86170\\Desktop\\98+8+.txt","r");
	if(fp==NULL){
		printf("\a打开失败\n");
		return 0;
	}
	
	
	/*a=getchar();
	while(a!='\n'){//回车代表结束 
		//将a写入文件之前,会清空文件内容 
		fputc(a,fp);
		a=getchar(); 
	}*/
	c=fgetc(fp);
	while(c!=EOF){
		putchar(c);
		c=fgetc(fp);
	} 
	//关闭文件; 
	fclose(fp);
	
	return 0;
} 

在这里插入图片描述

运行结果:
在这里插入图片描述

fputc函数
调用形式:fputc(ch,fp)
ch为要写入的字符,fp为文件指针。
功能:把字符ch写入到文件指针变量fp所指的文件中
返回值:(写成功)返回值就是输出的字符;(输出失败)返回EOF

#include <stdio.h>
int main()
{
	char ch;
	FILE *fp;
	
	//打开文件 
	fp=fopen("C:\\Users\\86170\\Desktop\\98+8+.txt","wt+");
	//判断其文件是否打开成功
	if(fp==NULL){
		printf("\a打开失败\n");
		return 0;
	}
		//写入前会清空文件
	while((ch=getchar())!='\n'){   //回车代表结束
		fputc(ch,fp); 
	}
	//关闭文件; 
	fclose(fp);
	
	return 0;
} 

运行结果:
在这里插入图片描述
在这里插入图片描述

字符串的读写

fgets函数
调用形式:fgets(str,n,fp);
str:数组名,n:字符个数,fp:文件指针
功能:从fp指向的文件读入长度为(n-1)的字符串,存放到字符数组str中
返回值:读成功,返回地址str,失败则返回NULL

fputs函数
调用形式:fputs(str,fp)
str:数组名,fp:文件指针
功能:str所指向的字符串写到文件指针变量fp所指向的文件中
返回值:写成功,返回0,否则返回非0值

批量数据化的读写
用二进制方式向文件读写一组数据
一般调用形式:

fread(buffer,size,count,fp);
//fread是用来存放从文件读入的数据的储存区的地址(从文件中读取数据)
fwrite(buffer,size,count,fp);
//fwrite是要把此地址开始的存储区中的数据向文件输出(向文件中写入数据)
buffer: 将文件中的数据读取到该缓冲区中,通常为数组名
size :要读的字节数(sizeof(int),sizeof(char))
count:要读写多少个数据项
fp :文件指针

feof()的原理
feof()函数,并不是通过读取到文件的EOF来评判,这个文件是否为空。
对feof()来说,它的工作原理是,站在光标所在位置,向后看看还有没有字符。如果有,返回0;如果没有,返回非0。它并不会读取相关信息,只是查看光标后是否还有内容。
直接使用时的错误分析:
对于一个空文件来说,当程序打开它的时候,它的光标会停在文件的开头,但是由于文件里什么内容都没有存(但是EOF是存在的),即整个文件就存贮了一个EOF。当程序打开文件,并直接调用feof()时,这个函数就会站在光标的位置向后张望,结果就看见了EOF,然后就当然返回0了。

rewind(fp);//文件位置指针回到文件开头

int fseek( FILE *stream, long offset, int origin );
功能:重定位流上的文件指针指向的位置
第一个参数stream为文件指针
第二个参数offset为偏移量,整数表示正向偏移,负数表示负向偏移
第三个参数origin设定从文件的哪里开始偏移,可能取值为:
SEEK_SET: 文件开头
SEEK_CUR: 当前位置
SEEK_END: 文件结尾
其中SEEK_SET,SEEK_CURSEEK_END和依次为0,1和2.

fseek(fp,100L,0);把fp指针移动到离文件开头100字节处;
fseek(fp,100L,1);把fp指针移动到离文件当前位置100字节处;
fseek(fp,-100L,2);把fp指针退回到离文件结尾100字节处;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值