您现在的位置是:首页 > 学无止境 > C语言网站首页C语言 C语言文件读写操作

C语言文件读写操作

  • 莫愁
  • C语言
  • 2019-07-02
简介文件是程序设计中的一个重要概念。所谓“文件”一般指存储在外部介质上数据的集合。C语言中对文件的操作主要是数据流。

字数 2295

C语言中对文件的操作主要是数据流。下面主要说明以下几个方面,文件的基本概念、文件类型指针、文件基本操作。

文件的基本概念

文件是程序设计中的一个重要概念。所谓“文件”一般指存储在外部介质上数据的集合。我们将数据的输入输出形象地称为“流”,即数据流,它表示了数据从源到目的端的流动。

文件名和文件路径 D:\CC\temp\file.txt

根据数据的组织形式,数据文件可分为ASCII文件(即文本文件)和二进制文件。数据在内存中是以二进制形式存储的,如果不加转换地输出到外存,就是二进制文件。如果要求在外存上以ASCII代码形式存储,则需要在存储前进行转换。

 

文件类型指针

每个被使用的文件都需要在内存中开辟一个相应的文件信息区,用来存放文件的相关信息。这些信息保存在一个结构体变量中,该结构体类型是由系统声明的,取名为FILE,包含在头文件“stdio.h”中。

在对文件进行操作之前,首先要设置一个指向FTIL类型变量的指针变量,然后通过它来引用这些FILE类型变量。通过文件指针变量能够找到与它相关联的文件。

下面定义了一个指向文件型数据的指针变量:

FILE * fp;

 

文件基本操作

fopen(打开文件)   fclose  (关闭文件)

定义函数   FILE * fopen(const char * path,const char * mode);

函数说明:  参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态,若取值为rb,表示 以二进制读取方式打开文件,该文件必须存在。一般而言,开文件后会作一些文件读取或写入的动作,若开文件失败,接下来的读写动作也无法顺利进行,所以在fopen后请作错误判断及处理。

例:

FILE * fp;

fp = fopen( “a1.txt”, “r”);

……

fclose(fp);

所谓“打开”文件是指为文件建立相应的信息区(用来存放有关文件的信息)和文件缓冲区(用来暂时存放输入输出的数据)。

所谓“关闭”文件是指撤销文件信息区和文件缓冲区,使文件指针变量不再指向该文件。

 

文件打开方式  含义  如果文件不存在
"r"(只读) 为输入打开一个文本文件 出错
"w”(只写) 为输出打开一个文本文件 建立新文件
"a"(追加) 向文本文件尾添加数据 出错
"rb"(只读) 为输入打开一个二进制文件 出错
"wb"(只写) 为输出打开一个二进制文件 建立新文件
"ab"(追加) 向二进制文件尾添加数据 出错
"r+"(读写) 为读写打开一个文本文件 出错
"w+"(读写) 为读写建立一个新的文本文件 建立新文件
"a+"(读写) 为读写打开一个文本文件(追加) 出错
"rb+"(读写) 为读写打开一个二进制文件 出错
"wb+"(读写) 为读写建立一个新的二进制文件 建立新文件
"ab+"(读写) 为读写打开一个二进制文件(追加) 出错

 

 读写一个字符和一个字符串 

函数名 调用形式 功能 返回值
fgetc fgetc(fp) 从fp指向的文件读入一个字符 读成功,带回所读的字符,失败则返回文件结束标志EOF(即-1)
fputc fputc(ch, fp) 把字符ch写到文件指针变量fp所指向的文件中 输出成功,返回值就是输出的字符;输出失败,返回EOF
fgets fgets(str, n, fp) 从fp指向的文件读入一个长度为(n-1)的字符串,存放到字符数组str中 读成功,返回地址str,失败则返回NULL
fputs fputs(str, fp) 把str指向的字符串写到文件指针变量fp指向的文件中 输出成功,返回0;否则返回非0值

 

用二进制方式向文件读写一组数据

fread(从文件流读取数据)

定义函数

size_t fread(void * ptr,size_t size,size_t nmemb,FILE * stream);

函数说明

fread()用来从文件流中读取数据。参数stream为已打开的文件指针,参数ptr 指向欲存放读取进来的数据空间,读取的字符数以参数size*nmemb来决定。

返回值

返回实际读取到的nmemb数目。

 

fwrite(将数据写至文件流)

定义函数

size_t fwrite(const void * ptr,size_t size,size_t nmemb,FILE * stream);

函数说明

fwrite()用来将数据写入文件流中。

参数stream为已打开的文件指针,参数ptr 指向欲写入的数据地址,总共写入的字符数以参数size*nmemb来决定。

返回值

返回实际写入的nmemb数目。

 

fread和fwrite的一般调用形式为:

fread( buffer, size, count, fp)

fwrite ( buffer, size, count, fp)

其中:

buffer是一个地址,对于fread来说,它是用来存放从文件读入的数据的存储区的地址;对于fwrite来说,是要把此地址开始的存储区中的数据向文件输出。size是要读写的字节数。count是要读写多少个数据项(每个数据项长度为size)。fp是FILE类型的文件指针。

 

用格式化的方式读写文件:

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

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

 

fseek(移动文件流的读写位置)

定义函数

int fseek(FILE * stream,long offset,int whence);

函数说明

fseek()用来移动文件流的读写位置。参数stream为已打开的文件指针,参数offset为根据参数whence来移动读写位置的位移数。

参数

whence为下列其中一种:

SEEK_SET从距文件开头offset位移量为新的读写位置。

SEEK_CUR 以目前的读写位置往后增加offset个位移量。

SEEK_END将读写位置指向文件尾后再增加offset个位移量。

当whence值为SEEK_CUR 或SEEK_END时,参数offset允许负值的出现。

下列是较特别的使用方式:

1) 欲将读写位置移动到文件开头时:fseek(FILE *stream,0,SEEK_SET);

2) 欲将读写位置移动到文件尾时:fseek(FILE *stream,0,SEEK_END);

 

ftell(取得文件流的读取位置)

定义函数

long ftell(FILE * stream);

函数说明

ftell()用来取得文件流目前的读写位置。参数stream为已打开的文件指针。

返回值

当调用成功时则返回目前的读写位置,若有错误则返回-1,errno会存放错误代码。

 

代码展示

注:运行代码前在目录下创建个1.txt,为了和截图实验效果一样,在里面写如下内容:

ABCDEF
GHIJKLM

效果图

运行效果图


转载: 感谢您对莫愁个人博客网站平台的认可,非常欢迎各位朋友分享到个人站长或者朋友圈,但转载请说明文章出处“来源莫愁个人博客 https://www.mochoublog.com/study/268.html”。

文章评论

    • 评论
    人参与,条评论

技术在线

服务时间

周一至周日 12:00-22:00

关闭下雪
关闭背景特效