C语言复习(三)文件操作

文件操作

————————————————————————————————————

操作系统时以文件为单位对数据进行管理的。

1、文件的打开与关闭

(1)首先需要一个文件型指针变量

FILE *fp;fp是一个指向FILE类型结构体的指针变量。

如果有n个文件,一般需要设置n个指针变量令它们分别指向n个文件,以实现对文件的访问。(fp实际上是一个结构体指针)

(2)FILE类型的数组:FILE f[5],定义了一个结构体数组f,它有5个元素,可以用来存放5个文件的信息。

(3)文件的打开需要用到一个函数为fopen函数即

FILE *fp;

fp = fopen(D:\\xi.txt,“文件打开方式”);

凡是用“r”打开一个文件时,该文件必须已经存在,且只能从该文件读出。

用“w”打开的文件只能向该文件写入。若打开的文件不存在,则以指定的文件名建立该文件,若打开的文件已经存在,则将该文件删除,重新创建一个文件。

若要向一个已存在的文件追加新的信息,只能用“a”方式打开文件。但此时该文件必须是存在的,否则将出错。

如果打开一个文件时出错则fopen函数会返回一个空指针,程序中可以用if(fp ==NULL)来判断文件是否正常打开。

(4)文件的关闭

文件的关闭需要用到fclose函数,即fclose(fp);使文件指针变量不再指向该文件,此后不能再通过该指针对原来与其相联系的文件进行操作。一般关闭成功返回值为0,失败返回值为EOF(-1)。

(5)文件的读写

对文件的读和写是最常用的文件操作。在C语言中提供了多种文件读写的函数:

字符读写函数:fgetc和fputc。

字符串读写函数:fgets和fputs。

数据块读写函数:fread和fwrite。

格式化读写函数:fscanf和fprintf。

————————————————————————————————

fputc和fgetc:fputc(ch,fp);

ch为一个字符,意思就是把一个字符(实际上是字符的值)输出到fp指向的文件中。此函数有一个返回值,如果写入成功则返回值为写入的那个字符,否则则为EOF(-1).EOF就相当于ctrl + z/EOF是文件结束的标志。

ch = fgetc(fp);

从打开的文件fp中读取一个字符并送入ch中。

补充一下:从一个文本文件顺序读入字符并在屏幕上显示出来

ch = fgetc(fp);

while(ch !=EOF)

{putchar(ch);

ch = fgetc(fp)

}

EOF不是可输出字符,因此不能在屏幕上显示,由于字符的ASCⅡ码不可能出现-1,因此EOF定义为-1是合适的,当读入的字符值为-1时,表示读入的已不是正常的字符,而是文件结束符。

补充两下:从一个二进制文件顺序读入字符:

while(feof(fp)==0)

{

ch=fgetc(fp);

}

ANSI C提供一个feof()函数来判断文件是否真的结束。如果文件结束,则函数feof (fp)的返回值为1,否则为0。这个函数也可以用于文本文档的读取。

————————————————————————————————————————

fputs和fgets:字符串输入输出函数

fputs(“字符串”,fp);将字符串输入到fp这个文件中,输入成功返回0,输入失败返回EOF。

fgets(str,n,fp);即从fp所指的文件中读出n-1个字符送入字符数组str中。

scanf不能接受字符串中的空格键 所以用fgets(字符数组,长度,stdin);来输入到标准输入流中。

————————————————————————————————————————

fread()和fwrite():fread(buffer,size,count,fp);

fwrite(buffer,size,count,fp);

buffer是一个指针,对于fread来说,它是读入数据的存放地址,对于fwrite来说,是要输出数据的地址。size为要读写的字节数。count为要读写多少个size字节的数据项。

此方法适合结构体类型的读取和写入操作

如 struct student_type

{

char name[10];

int num;

int age;

char addr[30];}stud[40];

可以用fread和fwrite来进行数据的操作。

for(i=0;i<=40;i++)

fread(&stud[i],sizeof(struct student_type),1,fp);

for(i=0;i<=40;i++)

fwrite(&stud[i],sizeof(struct student_type),1,fp);

——————————————————————————————————

格式化读写函数fprintf()和fscanf():

fprintf(文件指针,格式字符串,输出表列);

fscanf(文件指针,格式字符串,输入表列);

从磁盘文件中按格式读入或读出字符。格式字符串就是类似与%d %s这样。

——————————————————————————————————

除了上述输入输出函数,还有fseek随机读写函数(一般用于二进制文件)

函数功能:改变文件的位置指针 fseek(文件类型指针,位移量,起始点);

起始点:系统已经给宏定义  文件开头  即  #define SEEK_SET   0

   文件当前位置 #define SEEK_CUR 1

          文件末尾      #define SEEK_END   2 

位移量:以起始点为开始点向前面移动的字节数。

例如 fseek(fp,100L,0);

fseek(fp,i*sizeof(struct stu),0);   





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值