c语言函数库第二章IO函数Word格式文档下载.docx
《c语言函数库第二章IO函数Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《c语言函数库第二章IO函数Word格式文档下载.docx(58页珍藏版)》请在冰豆网上搜索。
返回当前文件指针位置函数17
18.fwrite:
向文件写入数据函数18
19.getc:
从流中读取字符函数18
20.getchar:
从标准输入文件中读取字符函数20
21.gets:
从标准输入文件中读取字符串函数20
22.perror:
打印系统错误信息函数21
23.printf:
产生格式化输出的函数21
24.putc:
向指定流中输出字符函数22
25.putchar:
向标准输出文件上输出字符23
26.puts:
将字符串输出到终端函数23
27.remove:
删除文件函数24
28.rename:
重命名文件函数25
29.rewind:
重置文件指针函数25
30.scanf:
格式化输入函数26
31.setbuf、setvbuf:
指定文件流的缓冲区函数27
32.sprintf:
向字符串写入格式化数据函数28
33.sscanf:
从缓冲区中读格式化字符串函数29
34.tmpfile:
创建临时文件函数29
35.tmpnam:
创建临时文件名函数30
36.ungetc:
把字符退回到输入流函数31
复位错误标志函数
函数原型:
voidclearerr(FILE*fp);
头文件:
#include<
stdio.h>
是否是标准函数:
是
函数功能:
复位错误标志,即:
使fp所指向的文件中的错误标志和文件结束标志置0。
当输入输出函数对文件进行读写出错时,文件就会自动产生错误标志,这样会影响程序对文件的后续操作。
clearerr函数就是要复位这些错误标志,也就是使fp所指向的文件的错误标志和文件结束标志置0,从而使文件恢复正常。
返回值:
无
例程如下:
复位错误标志演示。
#include<
intmain(void)
{
FILE*fp;
charch;
/*以写的方式打开一个文件名为test.txt的文件*/
fp=fopen("
test.txt"
"
w"
);
/*错误地从fp所指定的文件中读取一个字符,并打印它*/
ch=fgetc(fp);
if(ferror(fp))
{
/*如果此操作错误,就发布错误信息*/
printf("
Thisisaerrorreading!
\n"
/*复位错误标志*/
clearerr(fp);
}
/*关闭文件*/
fclose(fp);
return0;
}
例程说明:
(1)首先程序以只写的方式打开一个文件名为”test.txt”的文件。
这样,该文件就只能写而不能读了。
(2)程序企图应用fgetc函数从fp所指的文件中读出一个字符,这当然是违法的,因此文件自动产生错误标志。
(3)当用ferror函数检测出文件流存在错误时,就发布一条错误信息,并用clearerr函数清除fp指定的文件流所使用的错误标志,也就是使fp所指的文件的错误标志和文件结束标志置0。
这样原先的错误就不会对文件的后续操作产生影响。
注意:
ferror函数与clearerr函数应该配合使用。
也就是说,通过ferror函数检测出文件有错误标志后要用clearerr函数复位错误标志。
检测文件结束符函数
intfeof(FILE*fp);
检测流上的文件结束符,即:
检测文件是否结束。
应用该函数可以判断一个文件是否到了结尾。
在读取一个未知长度文件时,这个函数很有用。
遇到文件结束符返回非0,否则返回0。
:
检测文件结束标志演示。
{
FILE*stream;
/*以只读方式打开test.txt文件*/
stream=fopen("
r"
/*从文件中读取一个字符*/
fgetc(stream);
/*检测是否是EOF,即结束标志*/
if(feof(stream))
Havereachedtheendofthefile!
/*关闭该文件*/
fclose(stream);
(1)首先程序打开一个名为test.txt的文件。
(2)应用fgetc函数从一个名为test.txt的文件中读取一个字符。
(3)判断它是否为文件结束标志EOF,如果是文件结束标志,就说明该文件已经结束,于是在屏幕上显示一条提示信息。
如果不是文件的结束标志,就说明文件还未结束,信息不显示。
(4)最后关闭文件。
在实际应用中,feof函数很重要,利用它程序员就可以很方便地判断当前的文件是否结束,从而进行不同的处理。
例如,在从一个未知长度的文件中读取信息时,就可以利用feof函数判断什么时候该文件读完。
检测流上的错误函数
intferror(FILE*fp);
检测流上的错误。
即:
检查文件在使用各种输入输出函数进行读写时是否出错。
当输入输出函数对文件进行读写时出错,文件就会产生错误标志。
应用这个函数,就可以检查出fp所指向的文件操作是否出错,也就是说是否有错误标志。
未出错返回值为0,否则返回非0,表示有错。
应用ferror函数检查流上的错误。
%c\n"
ch);
Errorreadingfromtest.txt!
(1)首先以只写的方式打开一个文件名为”test.txt”的文件。
程序企图用fgetc函数从fp所指的文件中读出一个字符,这样就是非法操作,也就是说在用fgetc函数进行读取字符时出错了,因此文件产生错误标志。
(2)再用ferror函数来检测输入输出函数进行文件读写操作时是否出错,结果发现有错,因此函数返回一个非0整型数,并提示出错信息。
清除文件缓冲区函数
intfflush(FILE*fp);
清除一个流,即清除文件缓冲区,当文件以写方式打开时,将缓冲区内容写入文件。
也就是说,对于ANSIC规定的是缓冲文件系统,函数fflush用于将缓冲区的内容输出到文件中去。
如果成功刷新,fflush返回0。
指定的流没有缓冲区或者只读打开时也返回0值。
返回EOF指出一个错误。
第一种方式读写文件
string.h>
conio.h>
io.h>
intmain(void)
FILE*stream1,*stream2;
chartest[20]="
Thisisatest"
;
charres[20];
/*以写的方式打开文件test.txt*/
stream1=fopen("
/*向文件写入字符串*/
fwrite(test,15,1,stream1);
/*以读的方式打开文件test.txt*/
stream2=fopen("
/*将文件内容读入缓冲区*/
if(fread(res,15,1,stream2))
%s"
res);
else
Readerror!
fclose(stream1);
fclose(stream2);
getch();
第二种方式读写文件
/*将缓冲区的内容写入文件*/
fflush(stream1);
中定义了两个文件指针stream1和stream2。
(1)首先以写的方式打开文件test.txt,用指针stream1指向该文件,并向文件中写入字符串"
。
(2)不关闭该文件,以读的方式打开文件test.txt,并用指针stream2指向该文件,试图将刚刚写入的字符串读入到内存缓冲区中。
如果读入成功,打印出该字符串,否则报错。
实践证明,例程如下:
的输出结果是在屏幕上显示错误信息Readerror!
(2)调用fflush函数将缓冲区的内容写入文件。
(3)不关闭该文件,以读的方式打开文件test.txt,并用指针stream2指向该文件,试图将刚刚写入的字符串读入到内存缓冲区中。
的输出结果是在屏幕上显示字符串"
产生这样的效果原因在于:
中将文件打开后,指针stream1指向的是该文件的内存缓冲区,将字符串写入后也只是写到了文件的内存缓冲区中,而并没有写到磁盘上的文件中。
而当以读的方式打开该文件时,该文件中的内容实际为空,也就是stream2指向的缓冲区中内容为空。
因此读文件发生错误。
而例程如下:
中,在写完文件后调用函数fflush,将缓冲区的内容写到文件中,这样再以读的方式打开该文件时,文件中已经存有了字符串,因此可以正常读出。
如果在写完文件后调用函数fclose关闭该文件,同样可以达到将缓冲区的内容写到文件中的目的,但是那样系统开销较大。
从流中读取字符函数
intfgetc(FILE*fp);
从流中读取字符,即从fp所指定的文件中取得下一个字符。
这里需要注意,在每取完一个字符时fp会自动向下移动一个字节。
这样编成时,程序员就不用再对fp控制了。
这种功能在许多读写函数中都有体现。
返回所得到的字符,若读入错误。
返回EOF。
应用fgetc函数从文件中自动读取字符。
charstring[]="
/*以读写方式打开一个名为test.txt的文件*/
w+"
/*向文件中写入字符串string*/
fwrite(string,strlen(string),1,fp);
/*将fp指针指向文件首*/
fseek(fp,0,SEEK_SET);
do
/*从文件中读一个字符*/
/*显示该字符*/
putch(ch);
}while(ch!
=EOF);
fclose(fp);
(1)首先程序先以读写方式打开一个名为test.txt的文件,并向该文件中写入一个字符串。
(2)再应用fseek函数将文件指针fp定位在文件的开头,再循环地将字符逐一读出。
这里每读出一个字符,指针fp会自动地向后移一个字节,直至读到文件尾,即EOF标志,循环才停止。
因为fgetc函数的返回值为得到的字符,所以用一个字符型变量ch来接受读出的字符。
(3)最后的运行结果是在屏幕上打印出Thisisatest字符串。
取得当前文件的句柄函数
intfgetpos(FILE*stream,fpos_t*pos);
取得当前文件的指针所指的位置,并把该指针所指的位置数存放到pos所指的对象中。
pos值以内部格式存储,仅由fgetpos和fsetpos使用。
其中fsetpos的功能与fgetpos相反,为了详细介绍,将在后节给与说明。
成功返回0,失败返回非0,并设置errno。
应用fgetpos函数取得当前文件的指针所指的位置。
fpos_tpos;
/*以读写方式打开一个名为test.txt的文件*/
/*将字符串写入文件*/
/*取得指针位置并存入&
pos所指向的对象*/
fgetpos(fp,&
pos);
Thefilepointerisatbyte%ld\n"
pos);
/*重设文件指针的位置*/
fseek(fp,3,0);
/*再次取得指针位置并存入&
(1)首先,程序以读写方式打开一个名为test.txt的文件,并把字符串"
写入文件。
字符串共14个字节,地址为0~13。
用fwrite函数写入后,文件指针自动指向文件最后一个字节的下一个位置。
即这时的fp的值应该是14。
(2)再用fgetpos函数取得指针位置并存入&
pos所指向的对象,此时,pos中的内容为14。
然后在屏幕上显示出Thefilepointerisatbyte14。
(3)再用fseek函数重设文件指针的位置,让fp的值为3,即指向文件中第4个字节。
再次取得指针位置并存入&
pos所指向的对象。
然后在屏幕上显示出Thefilepointerisatbyte3。
从流中读取字符串函数
char*fgets(char*string,intn,FILE*fp);
从fp所指的文件中读取一个长度为(n-1)的字符串,并将该字符串存入以string为起始地址的缓冲区中。
fgets函数有三个参数,其中string为缓冲区首地址,n规定了要读取的最大长度,fp为文件指针。
返回地址string,若遇到文件结束符或出错,返回NULL。
用feof或ferror判断是否出错。
用fgets函数从文件中读取字符串。
charstr[20];
/*以读写的方式打开一个名为test.txt的文件*/
/*文件指针定位在文件开头*/
/*从文件中读一个长为strlen(string)的字符串*/
fgets(str,strlen(string)+1,fp);
/*显示该字符串*/
str);
(1)首先,以读写的方式打开一个名为test.txt的文件,并将字符串写入文件。
应用fseek函数将文件指针定位在文件开头。
(2)从文件中读一个长为strlen(string)的字符串,这里应注意第二个参数若为n,则表示从fp所指的文件中读取一个长度为(n-1)的字符串。
因此,这里的参数为strlen(string)+1,表示读取一个长度为strlen(string)的字符串。
把字符串读到以str为首地址的数组中。
(3)最后显示该字符串。
文件的打开与关闭函数
FILE*fopen(char*filename,char*type);
intfclose(FILE*fp);
函数fopen:
打开一个流,即:
打开一个文件。
该函数有两个参数,filename是需要打开文件的文件名,type是打开文件的方式。
函数fclose:
关闭一个流,即:
关闭一个文件,并释放文件缓冲区。
fclose函数与fopen函数是相对的两个函数。
fclose函数的参数是指向文件的指针,应用该函数用以在程序结束之前关闭文件,并释放文件缓冲区。
这样可以保证文件的数据不流失。
在这里,特别列出所有的文件打开方式,以供大家参考。
如下表所示。
文件的打开方式
文件使用方式
意义
r
只读打开一个文本文件,只允许读数据
w
只写打开或建立一个文本文件,只允许写数据
a
追加打开一个文本文件,并在文件末尾写数据
rb
只读打开一个二进制文件,只允许读数据
wb
只写打开或建立一个二进制文件,只允许写数据
ab
追加打开一个二进制文件,并在文件末尾写数据
r+
读写打开一个文本文件,允许读和写
w+
读写打开或建立一个文本文件,允许读写
a+
读写打开一个文本文件,允许读,或在文件末追加数据
rb+
读写打开一个二进制文件,允许读和写
wb+
读写打开或建立一个二进制文件,允许读和写
ab+
读写打开一个二进制文件,允许读,或在文件末追加数据
fopen:
FILE类型,如果打开的文件存在,返回指向该文件的指针;
如果打开的文件不存在,则在指定的目录下建立该文件打开,并返回指向该文件的指针。
fclose:
整型,有错返回非0,否则返回0。
打开并输出一个文件,然后关闭。
charbuf[11]="
abcdefghij"
/*以写方式打开文件名为test.txt的文件*/
/*把字符串写入文件中*/
fwrite(&
buf,strlen(buf),1,fp);
/*关闭文件*/
(1)首先开辟一个11个字节大小的缓冲区buf,也就是数组,但预先只能存入10个字符。
这是因为C语言中规定数组存放字符串时,最后一个字节要以’/0’结尾,作为结束标志,并由系统自动在字符串末尾添加’/0’标志。
因此,11个字节大小的缓冲区只存放一个长10个字节的字符串。
(2)用fopen函数以写的方式打开一个名为test.txt的文件并将字符串写入文件。
调用fclose函数关闭该文件。
(3)fclose函数与fopen函数正好相对,其作用是关闭一个文件。
当使用fopen函数打开一个文件时,会返回一个指向该文件的指针。
在该例程中这个指针被赋值给fp,也就是说fp指向了test.txt这个文件。
而当调用fclose函数关闭该文件,即fclose(fp)时,fp就不再指