C语言——文件

文章详细介绍了C语言中如何对文件进行操作,包括使用fopen函数打开文件,fgetc和fgets进行读取,以及fclose关闭文件。文件可以是程序文件或数据文件,读写通过文件指针实现,fopen的打开模式如r、w定义了读写权限。文章还强调了文件打开成功与否的检查以及fgets函数的使用细节。
摘要由CSDN通过智能技术生成

所谓“文件”一般是指存储在外部介质上数据的集合。一批文件是以数据的形式存放在外部介质(如磁盘)上的。操作系统是以文件为单位对数据进行管理的,也就是说,如果想找存在外部介质上的数据,必须先按文件名找到指定的文件,然后再从该文件中读取数据。


在程序设计中,我们一般读的文件有两种:程序文件 和 数据文件
程序文件:源程序文件(后缀为.c)、目标文件(win下后缀为 .obj)、可执行文件(win下环境后缀为.exe)
数据文件:文件的内容不一定是程序,而是运行时读写的程序,比如程序运行需要从中读取数据的文件,或者输出内容的文件。
 


中文名   C文件
规定       没有输入输出语句
集合       存储在外部介质上数据
fclose     关闭文件
fputc       向文件写字符

C文件规定
在C语言中,没有输入输出语句,对文件的读写都是用库函数来实现的。ANSI规定了标准输入输出函数,用它们对文件进行读写。

文件的打开和关闭

文件的指针

在C语言中用一个指针变量指向一个文件,这个指针称为文件指针。通过文件指针就可对它所指的文件进行各种操作。

缓冲文件系统中,关键的概念是“文件类型指针”,简称“文件指针”。\n\n每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名字,文件状态及文件当前的位置等)。这些信息是保存在一个结构体变量中的。该结构体类型是由系统声明的,取名FILE

文件的打开和关闭

 文件的打开和关闭,文件在读写之前应该先打开文件,在使用结束之后应该关闭文件。在编写程序的时候,在打开文件的同时,都会返回一个FILE*的指针变量指向该文件,也相当于建立了指针和文件的关系。

fopen函数用来打开一个文件,其调用的一般形式为:文件指针名=fopen(文件名,打开方式) 其中,例如:

FILE *fp;
fp=fopen("file.a","r");


其意义是在当前目录下打开文件file a,只允许进行“读”操作,并使fp指向该文件。
打开方式主要有以下若干类:


r:只读打开一个文本文件,只允许读数据
w:只写打开或建立一个文本文件,只允许写数据
a:追加打开一个文本文件,并在文件末尾写数据
t:以文本的方式打开文件
b:以二进制的方式打开文件
+:可读可写


另外


rt+:读写打开一个文本文件,允许读和写
wt+:读写打开或建立一个文本文件,允许读写
at+:读写打开一个文本文件,允许读,或在文件末追加数据
rb+:读写打开一个二进制文件,允许读和写
wb+:读写打开或建立一个二进制文件,允许读和写
ab+:读写打开一个二进制文件,允许读,或在文件末追加数据


判断打开是否成功:

if((fp=fopen("c:\\hzk16","rb")==NULL)
{
printf("\nerror on open c:\\hzk16 file!");
exit(-1);
}

关闭文件
调用的一般形式是: fclose(文件指针);

 例如:

fclose(fp);


正常完成关闭文件操作时,fclose函数返回值为0。如返回非零值则表示有错误发生。
读字符
fgetc函数的功能是从指定的文件中读一个字符,函数调用的形式为:
字符变量=fgetc(文件指针);
可参考下例:
 

#include<stdio.h>
main()
{
FILE *fp;
char ch;
if((fp=fopen("e10_1.c","rt"))==NULL)
{
printf("Cannot open file strike any key exit!");
getch();
exit(1);
}
ch=fgetc(fp);
while (ch!=EOF)
{
putchar(ch);
ch=fgetc(fp);
}
fclose(fp);
}

读取字符串
从指定的文件中读一个字符串到字符数组中,函数调用的形式为: fgets(字符数组名,n,文件指针);其中的n是一个正整数。表示从文件中读出的字符串不超过 n-1个字符。在读入的最后一个字符后加上串结束标志'\0'。例如:fgets(str,n,fp);的意义是从fp所指的文件中读出n-1个字符送入字符数组str中。
文件中读入一个含10个字符的字符串。
 

#include<stdio.h>
main()
{
FILE *fp;
char str[11];
if((fp=fopen("e10_1.c","rt"))==NULL)
{
printf("Cannot open file strike any key exit!");
getch();
exit(1);
}
fgets(str,11,fp);
printf("%s",str);
fclose(fp);
}

本例定义了一个字符数组str共11个字节,在以读文本文件方式打开文件e101.c后,从中读出10个字符送入str数组,在数组最后一个单元内将加上'\0',然后在屏幕上显示输出str数组。输出的十个字符正是例10.1程序的前十个字符。

注意事项

对fgets函数有两点说明:
1. 在读出n-1个字符之前,如遇到了换行符或EOF,则读出结束。
2. fgets函数也有返回值,其返回值是字符数组的首地址。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值