常用文件函数总结

常用文件函数总结

文章目录

    • 常用文件函数总结
  • 一.fopen()函数
    • 1. fopen()的模式字符串
  • 二.fclose()函数
  • 三.getc()函数
  • 四.putc()函数
  • 五. fprintf()函数
    • 1.标准文件和相关联的文件指针
  • 六.fscanf()函数
  • 七.fgets()函数
  • 八.fputs()函数
  • 九.fseek()函数
    • 1.文件的起始点模式
  • 十.ftell()函数
  • 十一.fgetpos()函数
  • 十二.fsetpos()函数


一.fopen()函数

它的第一个参数是待打开文件的名称,第二个参数是一个字符串,指定待打开文件的模式。(下面将会用它打开.cpp和.txt格式的文件)

1. fopen()的模式字符串

模式字符串 含义
“r” 以读模式打开文件
“w” 以写模式打开文件,把现有文件的长度截为0,如果文件不存在,则创建一个新文件
“a” 以写模式打开文件,在现有文件末尾添加内容,如果文件不存在,则创建一个新文件
“r+” 以更新模式打开打开文件(即可以读写文件)
“w+” 以更新模式打开打开文件(即读和写),如果文件存在,则将其长度截为0(就是删掉原来的内容!!);如果文件不存在,则创建一个新文件
“a+” 以更新模式打开打开文件(即读和写),在现有文件的末尾添加内容,如果文件不存在则创建一个新文件;可以读整个文件,但是只能从末尾添加内容

用法:

//这段代码文件名为fille.cpp
 #include
int main(void) 
{
     
	FILE *fp;
	if((fp=fopen("file2.cpp","r"))==NULL)//.cpp可以不带 
		printf("error");
	else
		printf("open");
}

效果:
常用文件函数总结_第1张图片
fille.cpp和fille2.cpp需要保存在同一文件中:
常用文件函数总结_第2张图片

二.fclose()函数

fclose(fp)函数关闭fp指定的文件,必要时刷新缓冲区。对于较正式的程序,应该检查是否成功关闭程序。如果关闭成功,fclose()函数返回0,否则返回EOF:
用法:

#include
int main(void) 
{
     
	char ch;
	FILE *fp;
	//fopen()
	if((fp=fopen("file2.cpp","r"))==NULL)//.cpp可以不带 
		printf("error\n");
	else
		printf("open\n");
	//fclose()	
	if(fclose(fp)==0)
		printf("success\n");
	else
		printf("error\n");
}

效果:
常用文件函数总结_第3张图片

三.getc()函数

下面这条语句的意思是“从fp指定的文件中获取一个字符”
ch=getc(fp);
用法:

#include
int main(void) 
{
     
	char ch;
	FILE *fp;
	//fopen()
	if((fp=fopen("file2.cpp","r"))==NULL)//.cpp可以不带 
		printf("error\n");
	else
		printf("open\n");
	
	//fclose()	
	//略
		
	//getc()
	
	while((ch=getc(fp))!=EOF)
		printf("%c",ch);
}

效果:常用文件函数总结_第4张图片

四.putc()函数

下面语句的意思是“把字符ch放入FILE指针fp指定的文件中”:
putc(ch,fp);
用法:

#include
int main(void) 
{
     
	char ch;
	FILE *fp;
	//putc
	fp=fopen("file2.cpp","a");//以写模式打开文件 
	putc('*',fp);
	fclose(fp);
	fp=fopen("file2.cpp","r");
	while((ch=getc(fp))!=EOF)
		printf("%c",ch);
}

效果:
常用文件函数总结_第5张图片

五. fprintf()函数

与printf()函数工作方式类似,fprintf()函数第一个参数为文件指针,而后是格式化列表和字符串,或者只有字符串。
如:

fprintf(fp,"wozhenshuai")
char a[]="wozhenshuai"
fprintf(fp,"%s",a);

fprintf()的第一个参数还可以是指向标准文件的指针:
stdio.h头文件把3个文件指针与3个标准文件相关联,c程序会自动打开这3个标准文件

1.标准文件和相关联的文件指针

标准文件 文件指针 通常使用设备
标准输入 stdin 键盘
标准输出 stdout 显示器
标准错误 stderr 显示器

用法:

#include
int main(void)
{
     
	FILE *fp;
	char ch;
	fp=fopen("F.txt","a+");
	fprintf(fp,"shuaibaol");
	
	fclose(fp);//如果不重新关闭打开,会输出很多空格,具体原因不清楚
	fp=fopen("F.txt","a+");
	
	while((ch=getc(fp))!=EOF)
	{
     
		printf("%c",ch);
	}
	
}

效果:
使用函数前文件内容:
常用文件函数总结_第6张图片
使用后:
常用文件函数总结_第7张图片
常用文件函数总结_第8张图片
若以指向标准文件的指针作为参数,可以理解为硬件设备为一个文件,将字符串输出到屏幕上(stdout和staerr),这个时候fprintf()和printf()用法是一样的,再次不在举例。

六.fscanf()函数

fscanf()与scanf()工作方式类似,但fscanf()把FILE指针作为第一个参数。
他将文件中的字符串作为输入传递给变量。
如:

char ch[100];
fscanf(fp,"%s",a);

以指向标准文件的指针作为参数(只有stdin):

char ch[100];
fscanf(stdin,"%40s",a);//只从输入中读取40个字符(或者以回车键提前结束)

用法:

#include
int main(void)
{
     
	FILE *fp;
	char ch[1000];
	fp=fopen("F.txt","a+");
	fscanf(fp,"%s",ch);
	puts(ch);
}

效果:
常用文件函数总结_第9张图片
以stdin作为参数:

#include
int main(void)
{
     
	FILE *fp;
	char ch[1000];
//	fp=fopen("F.txt","a+");
	fscanf(stdin,"%s",ch);
	puts(ch);
}

效果:
常用文件函数总结_第10张图片

七.fgets()函数

它的第一个参数表示存储输入位置的地址(char*类型);第二个参数是一个整数,表示待输入字符串的大小;最后一个参数是一个指针,指定带读取的文件。(从一个文件中读取字符串,存储到第一个参数指向的内存块中(就是存在一个字符数组里))。
下面是一个调用该函数的例子:

int STLEN=?;
char ch[];
fgets(ch,STLEN,fp);

fgets()函数读取输入直到第一个换行符后面(指以stdin作为最后一个参数的情况),或读到文件结尾,或者读到STLEN-1个字符(以上面的fgets()为例)。然后,fgets()在末尾添加一个空字符使之成为一个字符串。字符串的大小是其字符数加上一个空字符。如果fgets()在读到字符上限之前已读完一行,它会把表示结尾的换行符放在空字符前面。fgets()函数在遇到EOF时将返回NULL值,可以利用这一机制检查是否到达文件结尾;如果为遇到EOF则返回之前传给它的地址。
用法:

#include
int main(void)
{
     
	FILE *fp;
	char ch[1000];
	fp=fopen("F.txt","a+");
	fgets(ch,100,fp);
	puts(ch);
}

效果:
常用文件函数总结_第11张图片

以指向标准文件的指针作为参数(stdin):

#include
int main(void)
{
     
	FILE *fp;
	char ch[1000];
//	fp=fopen("F.txt","a+");
	fgets(ch,100,stdin);//回车结束
	puts(ch);
}

效果:
常用文件函数总结_第12张图片

八.fputs()函数

fputs()函数接受两个参数:第一个是字符串地址;第二个是文件指针。该函数根据传入地址找到的字符串写入指定的文件中。和puts()函数不同,fputs()在打印字符串时不会在末尾添加换行符。(将字符串输出到文件中)
下面是使用该函数的例子:

char ch[];
fputs(ch,fp);

由于fgets()保留了换行符。fputs()就不会再添加换行符(就把fgets()获取的换行符直接输出就好了),他们配合的非常好。
用法:

#include
int main(void)
{
     
	FILE *fp;
	char ch[]="\nyouxiu";
	fp=fopen("F.txt","a+");
	fputs(ch,fp);
}

运行前:
常用文件函数总结_第13张图片
运行后:

常用文件函数总结_第14张图片
以指向标准文件的指针作为参数:

#include
int main(void)
{
     
	FILE *fp;
	char ch[]="\nyouxiu";
//	fp=fopen("F.txt","a+");
	fputs(ch,stdout);
}

效果:
常用文件函数总结_第15张图片

九.fseek()函数

fseek()的第一个参数是FILE指针,指向待查找的文件,fopen()应该已打开该文件;fseek()的第二个参数是偏移量。该参数表示从起点开始(起点可以是开头、结尾、和当前位置)要移动的距离(参见下面表格列出的起始点模式)。该参数必须是一个long类型的值,可以为正(前移),负(后移)或0(保持不移动)。fseek的第三个参数是模式,该参数确定起点。根据ANSI标准,在stdio.h头文件中规定了几个模式的明示常量。

1.文件的起始点模式

模式 偏移量的起始点
SEEK_ SET 文件开始处
SEEK_CUR 当前位置
SEEK_END 文件末尾

下面是调用fseek()函数的一些示例,fp是一个文件指针:

fseek(fp,0L,SEEK_SET)//定位至文件开始处
fseek(fp,10L,SEEk_SET)//定位至文件中第10个字节(关于英文字符和中文字符所占字节数在后面给出)
fseek(fp,2L,SEEK_CUR)//从文件当前位置前移2个字节
fseek(fp,0L,SEEK_END)//定位至文件结尾
fseek(fp,-10L,SEEK_END)//从文件结尾处回退10个字节

如果一切正常,fseek()的返回值为0,如果出现错误(如试图移动的距离超出文件的范围),其返回值为-1。
用法:

#include
int main(void)
{
     
	FILE *fp;
	char ch[100];
	fp=fopen("F.txt","a+");
	fseek(fp,2L,SEEK_SET);
	fgets(ch,100,fp);
	fputs(ch,stdout);
}

效果:
常用文件函数总结_第16张图片
F.txt内容:
常用文件函数总结_第17张图片

十.ftell()函数

ftell()函数接受一个参数,FILE指针。返回类型是long,它返回的是当前位置(距文件开始处的字节数)。
《c primer plus》中说:ANSIC把他定义在stdio.h中。在最初的实现的UNIX中,ftell()通过返回距文件开始处的字节数来确定文件的位置。文件的第一个字节到文件开始处的距离是 0,以此类推。ANSIC规定,该定义适用于以二进制模式打开的文件,以文件模式打开的文件的情况不同。
(具体啥不同它也没说,我以后查了再写)
用法:

#include
int main(void)
{
     
	FILE *fp;
	long last,i; 
	fp=fopen("F.txt","a+");
	
	fseek(fp,0L,SEEK_END);//当前位置定义到文件结尾处
	
	last=ftell(fp);//获取结尾距离开头的距离(字节数) 
	
	for(i=1L;i<=last;i++)
	{
     
		fseek(fp,-i,SEEK_END);//从结尾往回走,故需要-号
		printf("%c",getc(fp));	
	}
	
}

效果:
常用文件函数总结_第18张图片

F.txt内容:
常用文件函数总结_第19张图片
注:
UTF-8编码:一个英文字符及标点占一个字节,一个中文(含繁体)字符及标点占3个字节。
ASCII编码:一个英文字符及标点占一个字节,一个中文字符及标点占2个字节。

十一.fgetpos()函数

他是处理大文件的函数,需要使用时自行百度

十二.fsetpos()函数

他是处理大文件的函数,需要使用时自行百度

你可能感兴趣的:(笔记)