梦募匦胧谴嬖诘模裨蚪岢龃怼?
5. 在打开个文件时如果出错fopen将返回个空指针值NULL在中可以用这信息来判别是否完成打开文件工作并作相应处理因此常用以下段打开文件:
((fp=fopen(\"c:\\\\hzk16\",\"rb\")NULL)
{
prf(\"\\nerror _disibledevent=>C语言中提供了多种文件读写:
·读写 :fgetc和fputc
·串读写:fgets和fputs
·数据块读写:freed和fwrite
·格式化读写:fscanf和fprinf
下面分别予以介绍使用以上都要求包含头文件stdio.h读写fgetC和fputC读写是以(字节)为单位读写 每次可从文件读出或向文件写入个
、读fgetc
fgetc功能是从指定文件中读个形式为: 变量=fgetc(文件指针); 例如:ch=fgetc(fp);其意义是从打开文件fp中读取个并送入ch中
对于fgetc使用有以下几点介绍说明:
1. 在fgetc中读取文件必须是以读或读写方式打开
2. 读取结果也可以不向变量赋值例如:fgetc(fp);但是读出不能保存
3. 在文件内部有个位置指针用来指向文件当前读写字节在文件打开时该指针总是指向文件第个字节使用fgetc 后 该位置指针将向后移动个字节 因此可连续多次使用fgetc读取多个 应注意文件指针和文件内部位置指针不是回事文件指针是指向整个文件须在中定义介绍说明只要不重新赋值文件指针值是不变文件内部位置指针用以指示文件内部当前读写位置每读写次该指针均向后移动它不需在中定义介绍说明而是由系统自动设置
[例10.1]读入文件e10-1.c在屏幕上输出
#<stdio.h>
{
FILE *fp;
char ch;
((fp=fopen(\"e10_1.c\",\"rt\"))NULL)
{
prf(\"Cannot open file strike any key exit!\");
getch;
exit(1);
}
ch=fgetc(fp);
while (ch!=EOF)
{
putchar(ch);
ch=fgetc(fp);
}
fclose(fp);
}
本例功能是从文件中逐个读取在屏幕上显示 定义了文件指针fp,以读文本文件方式打开文件“e10_1.c” 并使fp指向该文件如打开文件出错 给出提示并退出第12行先读出个然后进入循环 只要读出不是文件结束标志(每个文件末有结束标志EOF)就把该显示在屏幕上再读入下每读次文件内部位置指针向后移动个文件结束时该指针指向EOF执行本将显示整个文件
2、写fputc
fputc功能是把个写入指定文件中 形式为: fputc(量文件指针); 其中待写入量可以是常量或变量例如:fputc(\'a\',fp);其意义是把a写入fp所指向文件中
对于fputc使用也要介绍说明几点:
1. 被写入文件可以用、写、读写追加方式打开用写或读写方式打开个已存在文件时将清除原有文件内容写入从文件首开始如需保留原有文件内容希望写入以文件末开始存放必须以追加方式打开文件被写入文件若不存在则创建该文件
2. 每写入个文件内部位置指针向后移动个字节
3. fputc有个返回值如写入成功则返回写入 否则返回个EOF可用此来判断写入是否成功
[例10.2]从键盘输入行写入个文件 再把该文件内容读出显示在屏幕上
#<stdio.h>
{
FILE *fp;
char ch;
((fp=fopen(\"\",\"wt \"))NULL)
{
prf(\"Cannot open file strike any key exit!\");
getch;
exit(1);
}
prf(\"input a :\\n\");
ch=getchar;
while (ch!=\'\\n\')
{
fputc(ch,fp);
ch=getchar;
}
rewind(fp);
ch=fgetc(fp);
while(ch!=EOF)
{
putchar(ch);
ch=fgetc(fp);
}
prf(\"\\n\");
fclose(fp);
}
中第6行以读写文本文件方式打开文件第13行从键盘读入个后进入循环当读入不为回车符时 则把该写入文件的中然后继续从键盘读入下 每输入个文件内部位置指针向后移动个字节写入完毕 该指针已指向文件末如要把文件从头读出须把指针移向文件头 第19行rewind用于把fp所指文件内部位置指针移到文件头 第20至25行用于读出文件中行内容
[例10.3]把命令行参数中前个文件名标识文件 复制到后个文件名标识文件中 如命令行中只有个文件名则把该文件写到标准输出文件(显示器)中
#<stdio.h>
( argc,char *argv)
{
FILE *fp1,*fp2;
char ch;
(argc1)
{
prf(\"have not enter file name strike any key exit\");
getch;
exit(0);
}
((fp1=fopen(argv[1],\"rt\"))NULL)
{
prf(\"Cannot open %s\\n\",argv[1]);
getch;
exit(1);
}
(argc2) fp2=stdout;
((fp2=fopen(argv[2],\"wt \"))NULL)
{
prf(\"Cannot open %s\\n\",argv[1]);
getch;
exit(1);
}
while((ch=fgetc(fp1))!=EOF)
fputc(ch,fp2);
fclose(fp1);
fclose(fp2);
}
本为带参中定义了两个文件指针 fp1 和fp2分别指向命令行参数中给出文件如命令行参数中没有给出文件名则给出提示信息第18行表示如果只给出个文件名则使fp2指向标准输出文件(即显示器)第25行至28行用循环语句逐个读出文件1中再送到文件2中再次运行时给出了个文件名(由例10.2所建立文件) 故输出给标准输出文件stdout即在显示器上显示文件内容第 3次运行给出了 2个文件名因此把中内容读出写入到OK的中可用DOS命令type显示OK内容:移动个字节写入完毕 该指针已指向文件末如要把文件从头读出须把指针移向文件头 第19行rewind用于把fp所指文件内部位置指针移到文件头 第20至25行用于读出文件中行内容
[例10.3]把命令行参数中前个文件名标识文件 复制到后个文件名标识文件中 如命令行中只有个文件名则把该文件写到标准输出文件(显示器)中
#<stdio.h>
( argc,char *argv)
{
FILE *fp1,*fp2;
char ch;
(argc1)
{
prf(\"have not enter file name strike any key exit\");
getch;
exit(0);
}
((fp1=fopen(argv[1],\"rt\"))NULL)
{
prf(\"Cannot open %s\\n\",argv[1]);
getch;
exit(1);
}
(argc2) fp2=stdout;
((fp2=fopen(argv[2],\"wt \"))NULL)
{
prf(\"Cannot open %s\\n\",argv[1]);
getch;
exit(1);
}
while((ch=fgetc(fp1))!=EOF)
fputc(ch,fp2);
fclose(fp1);
fclose(fp2);
}
本为带参中定义了两个文件指针 fp1 和fp2分别指向命令行参数中给出文件如命令行参数中没有给出文件名则给出提示信息第18行表示如果只给出个文件名则使fp2指向标准输出文件(即显示器)第25行至28行用循环语句逐个读出文件1中再送到文件2中再次运行时给出了个文件名(由例10.2所建立文件) 故输出给标准输出文件stdout即在显示器上显示文件内容第 3次运行给出了 2个文件名因此把中内容读出写入到OK的中可用DOS命令type显示OK内容:
最新评论