函数介绍 文件打开和关闭操作 fopen():文件打开操作
头文件:stdio.h
函数定义:FILE *fopen(char *pname, char *mode)
函数说明:pname为文件名,mode为打开文件的方式
mode: "r" 打开一个已存在的文件文本,如果文件不存在则出错
用“r+”打开文件会清除文件原来的内容并重写数据
返回值:正常返回:FILE * 指向内存中文件信息开头的指针
异常返回:NULL,表示打开操作不成功
打开文件的效果是:
(1)为打开的文件赋值一个FILE类型的文件结构变量,并将相关信息填入文件结构变量中;
(二)开辟缓冲区;
(3)调用操作系统提供的打开文件或创建新文件的函数来打开或创建指定文件;
FILE *:指出fopen是一个返回文件类型的指针函数;
返回值
正常返回:打开文件的文件指针。
异常返回:NULL,表示打开操作不成功。
要说明的是:C语言将计算机的输入输出设备都看作是文件。例如,键盘文件、屏幕文件等。ANSI C标准规定,在执行程序时系统先自动打开键盘、屏幕、错误三个文件。这三个文件的文件指针分别是:标准输入stdin、标准输出stdout和标准出错 stderr。
(): 文件关闭
函数定义:int(FILE *fp);
函数说明:fp是指向打开文件的文件指针
返回值:
正常回报:0
异常返回:EOF,表示关闭文件时出错
fgetc:读取一个字符
函数定义:int fgetc(FILE *fp)
函数说明:从fp中读取一个字符并作为返回值返回
返回值:
正常返回:返回读取字符的代码
异常返回:返回EOF。 例如:当尝试从“打开写入”文件中读取字符时,会发生错误并返回 EOF
【例8.1】显示指定文件的内容。
//程序名称:.c
//执行时可用:形成命令行运行。 显示文件的内容。 例如,执行命令行.c将在屏幕上显示原始代码。
//。
#
(,char*argv[])//命令行参数
intch;//定义文件类型指针
FILE*fp;//判断命令行是否正确
if(argc!=2)
(",用法:\n");
;//输入错误的命令行,结束程序的执行
//打开argv[1]指向的文件进行读取
if((fp=fopen(argv[1],"r"))==NULL)
("d.\n",argv[1]);//打开操作失败
;//结束程序执行
//成功打开argv[1]指向的文件
ch=fgetc(fp);//从fp指向的文件当前指针位置读取一个字符
while(ch!=EOF)//判断刚刚读取的字符是否为文件结尾
(ch);//如果不是结束符,则输出到屏幕显示
ch=fgetc(fp);//继续从fp指向的文件中读取下一个字符
}//完成将fp指向的文件内容输出到屏幕上显示
(fp);//关闭fp指向的文件
fputc:将一个字符写入文件
函数定义:int fputc(int ch, FILE*fp)
函数说明:ch是整型变量,要写入文件的字符
fp:文件指针,要写入的文件
返回值:
正常返回:要写入的字符的代码
异常返回:返回EOF
[例8.2] 将一个文件的内容复制到另一个文件。
//程序名称:.c
//执行过程中可用:运行表单中的命令行,将文件中的内容复制到文件中。
//。
#
(,char*argv[])//命令行参数
英寸;
FILE*in,*out;//定义in和out两个文件类型指针
if(argc!=3)//判断命令行是否正确
(",用法:\n");
;//命令行错误,结束程序执行
//打开argv[1]指向的文件进行读取
if((in=fopen(argv[1],"r"))==NULL)
("d.\n", argv[1]);
;//打开失败,结束程序执行
//成功打开argv[1]指向的文件,然后
// 打开argv[2]指向的文件进行写入
if((out=fopen(argv[2],"w"))==NULL)
("%.\n",argv[2]);
;//打开失败,结束程序执行
//成功打开argv[2]指向的文件
ch=fgetc(in);//从in指向的文件当前指针位置读取一个字符
while(ch!=EOF)//判断刚刚读取的字符是否为文件结尾
fputc(ch,out);//如果不是结束符,则写入到out指向的文件中
ch=fgetc(in);//继续从in指向的文件中读取下一个字符
}//完成将in指向的文件内容写入(复制)到out指向的文件中
(in);//关闭in指向的文件
(out);//关闭out指向的文件
【例8.3】以小数点和字符显示文件代码,若有字符无法显示,则用井号“#”代替。
//程序名称:dumpf.c
//执行时可用:形成命令行运行。
//。
#
(,char*argv[])
[9];
英寸,计数,i;
文件*fp;
if(argc!=2)
(",用法:\n");
;
if((fp=fopen(argv[1],"r"))==NULL)
("%.\n",argv[1]);
;
计数=0;
做 {
我=0;
//输出八进制的第一列作为一行八个字节的首地址
("o:",计数*8);
做 {
// 从打开的文件中读取一个字符
ch=fgetc(fp);
//以十进制形式输出该字符的ASCII码
(“%4d”,ch);
//如果是不可显示的字符,则用“#”字符替换
if(ch'~')str[i]='#';
//如果是可显示字符,则存入数组str中,形成字符串
[i]=ch;
//保证每行输出8个字符
if(++i==8)break;
}while(ch!=EOF);//遇到文件结束标记,结束读文件操作
str[i]='\0';//给数组str添加字符串结束标记
for(;i"");//一行少于八个字符用空格填充
("%s\n", str);//输出字符串
count++;//准备输出下一行
}while(ch!=EOF);//直到文件末尾
(fp);//关闭fp指向的文件
fgets():从文件中读取字符串
函数定义: char *fgets(char *str, int n, FILE *fp)
函数说明:从fp指向的文件中读取n-1个字符,存入str指向的字符数组中,最后添加字符串终止符'\0'
参数说明:str:接受字符串的内存地址,可以是数组别名或指针
n:表示要读取的字符数
fp:这是文件指针,表示要从中读取字符的文件
返回值:
正常返回:字符串的内存首地址,即str的值
异常返回:返回NULL值。 这时就应该使用feof()或()函数来判断是否读到了文件末尾或者发生了错误。
fputs():将字符串写入文件
函数定义:将str处的字符串写入fp指向的文件中
功能说明:
str:要写入文件的字符串,不包括最后的'\0'
fp:这是文件指针,要写入字符串的文件指针
返回值:
正常返回:写入文件的字符数,即字符串的长度
异常返回:返回NULL值。 这时就应该使用feof()或()函数来判断是否读到了文件末尾或者发生了错误。
5.示例
[示例 8.4] 以下程序将一个文件的内容附加到另一个文件中。
//程序名称:.c
//执行期间可用:运行表单的命令行,并将文件内容追加到文件中。
//。
#
#
(,char*argv[])
[尺寸];
文件*fp1,*fp2;
if(argc!=3)
(“用法:\n”);
;
//通过追加打开argv[1]指向的文件
if((fp1=fopen(argv[1],"a"))==NULL)
("%.\n",argv[1]);
;
if((fp2=fopen(argv[2],"r"))==NULL)
("%.\n",argv[2]);
;
//读取一行并立即写出,直到文件末尾
while(fgets(,SIZE,fp1)!=NULL)
("%s\n",);
while(fgets(,SIZE,fp2)!=NULL)
fputs(,fp1);
(fp1);
(fp2);
if((fp1=fopen(argv[1],"r"))==NULL)
("%.\n",argv[1]);
;
while(fgets(,SIZE,fp1)!=NULL)
("%s\n",);
(fp1);
E.将格式化数据写入文件
1.功能原型
int fprintf(FILE *fp,char *format,arg_list)
2.功能说明
将变量list()中的数据按照指定的格式写入fp指定的文件中。 ()函数与()函数功能相同,但()函数是将数据写入屏幕文件()。
三、参数说明
fp:这是一个文件指针,指示要写入数据的文件。
:这是一个指向字符串的字符指针,其中包含了要写入的数据的格式,因此该字符串成为格式字符串。 格式字符串描述的规则与()函数中的格式字符串相同。
: 是要写入文件的变量列表,变量之间用逗号分隔。
4.返回值
没有任何。
5.例子
[8.5]下列程序的执行文件为.exe,执行时输入命令行:
[-是]
下表列出了命令行参数的含义及其作用:
//存储文件名:save.txt
//程序代码如下:
//。
#
()
[10];
,;
;
文件*fp;
if((fp=fopen(".txt","w"))==NULL)
("%.\n",".txt");
;
(stdin,"%s%d%d%ld",姓名,&,&n年龄,&);
(fp,"%s%5d%4d%8ld",姓名,,n年龄,);
(fp);
if((fp=fopen(".txt","r"))==NULL)
("%.\n",".txt");
;
(fp,"%s%d%d%ld",姓名,&,&n年龄,&);
(“\n”);
(,"%-10s%-8d%-6d%-8ld\n",姓名,,n年龄,);
(fp);
G.以二进制形式读取文件中的数据
1.功能原型
int fread(void *buffer,unsigned sife,unsigned count,FILE *fp)
2.功能说明
从 fp 指定的文件中,以二进制形式读取 sife*count 数据到 表示的数据区。
三、参数说明
:这是一个空指针,指向将要存储读入数据的存储区的首地址。
sife:表示数据块的字节数,即数据块的大小。
count:指出一次读入了多少个数据块(sife)。
fp:这是一个文件指针,指出要从中读取数据的文件。
4.返回值
正常返回:实际读取的数据块数量,即count。
异常返回:如果文件中剩余数据块的数量小于参数中count表示的数量,或者发生错误,则返回0。此时可以使用feof()和()来判断发生了什么情况
健康)状况。
H. 以二进制形式将数据写入文件
1.功能原型
int fwrite(void *buffer,unsigned sife,unsigned count,FILE *fp)
2.功能说明
以二进制形式,将指定数据缓冲区中的sife*count数据写入fp指定的文件中。
三、参数说明
:这是一个void指针,指向将数据输出到文件的缓冲区的首地址。
sife:表示数据块的字节数,即数据块的大小。
count:一次输出多少个数据块(sife)。
fp:这是一个文件指针,指出要从中读取数据的文件。
4.返回值
正常返回:实际输出数据块的个数,即count。
异常返回:返回0值,表示输出结束或发生错误。
5.示例
【例8.7】
#
#
{;
[20];
;
};
()
;
国际;
文件*输入,*输出;
if((in=fopen("file1.txt","rb"))==NULL)
("%.\n","file1.txt");
;
if((out=fopen("file2.txt","wb"))==NULL)
("%.\n","file2.txt");
;
while(fread(&wk,(),1,in)==1)
(&wk,(),1,输出);
(在);
(出去);
一、读取二进制形式的整数
1.功能原型
int getw(FILE *fp)
2.功能说明
从 fp 指定的文件中读取二进制形式的整数。
三、参数说明
fp:是文件指针。
4.返回值
正常返回:读取的整数值。
异常返回:返回EOF,即-1。 由于读取到的整数值可能为-1,所以必须使用feof()或()来判断是否是文件结尾或者发生了错误。
5.例子
【例8.8】
#
(,char*argv[])
inti,总和=0;
文件*fp;
if(argc!=2)
(",用法:\n");
退出(1);
if(!(fp=fopen(argv[1],"rb")))
("%.\n",argv[1]);
退出(1);
对于(i=1;i