文件

分类 函数名 功能
打开文件 fopen() 打开文件
关闭文件 fclose() 关闭文件
文件定位 fseek() 改变文件位置指针的位置
rewind() 使文件位置指针重新至于文件开头
ftell() 返回文件位置指针的当前值
文件状态 feof() 若到文件末尾,函数值为真
ferror() 若对文件操作出错,函数值为真
clearerr() 使ferror和feof()函数值置零

文件读写 fgetc(),getc()从指定文件取得一个字符
fputc(),putc()把字符输出到指定文件
fgets()从指定文件读取字符串
fputs()把字符串输出到指定文件
getw()从指定文件读取一个字(int型)
putw()把一个字输出到指定文件
fread()从指定文件中读取数据项
fwrite()把数据项写到指定文件中
fscanf()从指定文件按格式输入数据
fprintf()按指定格式将数据写到指定文件中

一.文件的打开(fopen函数)
函数调用:
FILE *fp;
fp = fopen(文件名,使用文件方式);

文件使用方式     含   义

“r” (只读)为输入打开一个文本文件
“w” (只写)为输出打开一个文本文件
“a” (追加)向文本文件尾增加数据
“rb” (只读)为输入打开一个二进制文件
“wb” (只写)为输出打开一个二进制文件
"ab“ (追加)向二进制文件尾增加数据
"r+“ (读写)为读/写打开一个文本文件
"w+” (读写)为读/写建立一个新的文本文件
"a+” (读写)为读/写打开一个文本文件
"rb+“ (读写)为读/写打开一个二进制文件
“wb+“ (读写)为读/写建立一个新的二进制文件
“ab+” (读写)为读/写打开一个二进制文件

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

字符读写函数 :fgetc 和 fputc
字符串读写函数:fgets 和 fputs
数据块读写函数:fread 和 fwrite
格式化读写函数:fscanf 和 fprinf

下面分别予以介绍。使用以上函数都要求包含头文件stdio.h。

字符输入输出函数(fputc()和fgetc())
fputc()函数调用:
fputc ( ch,fp ) ;

函数功能:
将字符(ch的值)输出到 fp 所指向的文件中去。

用写或读写方式打开一个已存在的文件时将清除原有的文件内容,写入字符从文件首开始。如需保留原有文件内容,希望写入的字符以文件末开始存放,必须以追加方式打开文件。被写入的文件若不存在,则创建该文件。

每写入一个字符,文件内部位置指针向后移动一个字节。

fputc函数有一个返回值,如写入成功则返回写入的字符,否则返回一个EOF。可用此来判断写入是否成功。

fgetc()函数调用:
ch = fgetc(fp);

函数功能:
其意义是从打开的文件 fp 中读取一个字符并送入 ch 中。

在fgetc函数调用中,读取的文件必须是以读或读写方式打开的。

在文件内部有一个位置指针。用来指向文件的当前读写字节。

在文件打开时,该指针总是指向文件的第一个字节。使用fgetc 函数后,该位置指针将向后移动一个字节。因此可连续多次使用fgetc函数,读取多个字符。

从一个二进制文件顺序读入字符:
while(!feof(fp))
  {
ch = fgetc(fp);
  }

注意:ANSI C提供一个feof()函数来判断文件是否真的结束。如果是文件结束,函数feof(fp)的值为1(真);否则为0(假)。以上也适用于文本文件的读取。

二、字符串输入输出函数(fputs()和fgets())
fgets函数
函数调用形式如:fgets(str,n,fp);

函数作用:
从fp所指的文件中读出n-1个字符送入字符数
组str中,因为在最后加一个’’。

返回值:
str的首地址

fputs函数

函数调用方式:fgets(“FISHC”,fp);

函数作用:
其意义是把字符串“FISHC”写入fp所指的文件
之中。

返回值:
输入成功,返回值为0;
输入失败,返回EOF.

数据块读写函数(fread()和fwrite())

数据块读写函数(fread()和fwrite())
函数调用:
fread (buffer, size, count, fp);
fwrite(buffer, size, count, fp);

参数说明:
buffer:是一个指针。
对fread 来说,它是读入数据的存放地址。
对fwrite来说,是要输出数据的地址(均指起始地址)。
size: 要读写的字节数。
count: 要进行读写多少个size字节的数据项。
fp: 文件型指针。

若有如下结构类型:
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 ( 文件指针,格式字符串,输入表列);
函数功能:
从磁盘文件中按格式读入或输出字符。
例如:
fprintf(fp, "%d,%6.2f", i, t);
fscanf (fp, "%d,%f", &i, &t);

fseek函数(一般用于二进制文件)
函数功能:
改变文件的位置指针

函数调用形式:
fseek(文件类型指针,位移量,起始点)

起始点:
文件开头 SEEK_SET 0
文件当前位置 SEEK_CUR 1
文件末尾 SEEK_END 2

位移量:以起始点为基点,向前移动的字节数

fseek(fp,100L,0);
将位置指针移到离文件头100个字节处

fseek(fp,50L, 1);
将位置指针移到离当前位置50个字节处

fseek(fp,50L, 2);
将位置指针从文件末尾处向后退10个字节

fseek(fp,isizeof(struct stu),0);
将位置指针移到离文件头i
sizeof(struct stu)这个距离处。

ftell函数
函数作用:
得到流式文件中的当前位置,用相对于文件开
头的位移量来表示。

返回值:
返回当前位置,出错时返回-1L。

应用举例:
i = ftell(fp);
if(i == -1L) printf(“error ”);

ferror函数

调用形式:
ferror(fp);

返回值:
返回0,表示未出错;返回非0,表示出错。

注意:
在调用一个输入输出函数后立即检查ferror函
数的值,否则信息会丢失。在执行fopen函数
时,ferror函数的初始值自动置为0。
clearerr函数

调用形式:
clearerr(fp);

函数作用:
使文件错误标志和文件结束标志置为0。

只要出现错误标志,就一直保留,直到对同一文件调用clearerr函数或rewind函数,或任何其他一个输入输出函数。

原文地址:https://www.cnblogs.com/poli/p/4579432.html