设为首页 加入收藏

TOP

C语言文件操作(FILE)与常用文件操作函数(一)
2019-08-13 05:39:24 】 浏览:109
Tags:语言 文件 操作 FILE 常用 函数

C程序把文件分为ASCII文件二进制文件,ASCII文件又称文本文件二进制文件和文本文件(也称ASCII码文件)二进制文件中,数值型数据是以二进制形式存储的,


而在文本文件中,则是将数值型数据的每一位数字作为一个字符以其ASCII码的形式存储,因此,文本文件中的每一位数字都单独占用一个字节的存储空间,


它一律把数据看成是字节构成的序列,即字节流,对文件的存取也是以字节为单位的,输入/输出的的数据流仅受程序控制而不受物理符号(如回车换行符)的控制,所以说C语言文件为流式文件


C语言的文件存取有两种方式:顺序存取和直接存取


 


(C语言有缓冲型非缓冲型两种文件系统缓冲型文件系统是指系统自动自动在内存中为每一个正在使用的文件开辟一个缓冲区,


作为程序与文件之间数据交换的中间媒介,也就是读文件时,数据先送到缓冲区,再传给C语言程序或则外存上,缓冲文件系统利用文件指针标识文件,


而非缓冲文件系统是不会自动设置文件缓冲区,缓冲区必须由程序员自己设定,缓冲型中的文件操作,也称高级文件操作,


高级文件操作函数大多是ANSIC定义的可移植的文件操作函数,具有跨平台和可移植能力,可解决大多数文件操作问题)


 


可以用该结构体类型来定义文件类型的指针变量


 FILE是在stdio.h中定义的结构体类型,封装了与文件有关的信息,如文件句柄、位置指针及缓冲区等,缓冲文件系统为每个被使用的文件在内存中开辟一个缓冲区,


用来存放文件的有关信息,这些信息被保存在一个FILE结构类型的变量中,fp是一个指向FILE结构体类型的指针变量  


  fopen()函数


  函数原型为:FILE *fopen(const char *filename, const char *mode);


  fopen(文件路径,文件使用方式);


  fopen函数打开filename指定的文件,返回一个指向FILE类型的指针,无论使用哪种方式,当打开文件时出现了错误,fopen函数都将返回NULL


  常见的文件使用方式:


  "r"----以只读的方式打开文件(该文件必须已经存在,若文件不存在,则会出错)


  "w"----以只写的方式打开文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件


  "a"----以只写的方式打开文本文件,位置指针移到文件末尾,向文件尾部添加数据,原文件数据保留,若文件不存在则会出错


  "+"----与上面的字符组合,表示以读写的方式打开文本文件,既可向文件中写入数据,也可从文件中读出数据


  "b"----与上面的字符组合,表示打开二进制文件



 


读写权限和读写方式可以组合使用,但是必须将读写方式放在读写权限的中间或者尾部(换句话说,不能将读写方式放在读写权限的开头)。例如:


(因为操作系统对于同时打开的文件数目是有限制的,所以在文件使用结束后必须使用fclose关闭文件,否则会出现意想不到的错误)


  (文件路径正斜杠反斜杠相关链接:https://blog.csdn.net/sszgg2006/article/details/8447176


 


或者


上述两条语句打开文件后文件内容自动清除,无论是否存在读/写文件操作,都会自动清除


 


  fclose()函数


  fclose(文件指针);


  若文件关闭成功则返回0,否则返回非0


 


  文件的读写


  fread()函数


  函数原型:unsigned int fread(void *buffer, unsigned int size, unsigned int count, FILE *fp);


  函数功能:从fp所指的文件中读取数据块并存储到buffer所指向的内存中,buffer是待读入数据块存储的起始地址,size是每个数据块的大小(待读入的每个数据块的字节数),


  count是最多允许读取的数据块个数(每个数据块size个字节),函数返回的是实际读到的数据块个数


 


  fwrite()函数


  函数原型:unsigned int fwrite(const void *buffer, unsigned int size, unsigned int count, FILE *fp);


  函数功能:将buffer指向的内存中的数据块写入fp所指的文件,buffer是待输出数据块的起始地址,size是每个数据块的大小(待输出的每个数据块的字节数),


  count是最多允许写入的数据块个数(每个数据块size个字节),函数返回的是实际写入的数据块个数


  tips:用户指定的内存块大小,最小为1字节,最大为整个文件


  fread()函数和fwrite()函数是按数据块的长度来处理输入/输出的,在用文本编辑器打开文本文件时可能因发生字符转换而出现莫名其妙的结果,所以这两个函数通常用于二进制文件的输入/输出


 


  fscanf()函数


  函数原型:int fscanf (FILE *fp, const char *format, ……);


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


  第一个参数为文件指针,第二个参数为格式控制符,第三个参数为地址参数表列,后两个参数与函数scanf()的参数相同


 


  fprintf()函数


  函数原型:int fprintf (FILE *fp, onst char *format, ……);


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


  第一个参数为文件指针,第二个参数为格式控制参数,第三个参数为输出参数列表,后两个参数和返回值与函数printf()相同


  (用函数fscanf()和fprintf()进行文件的格式化读写,读写方便容易理解,但输入时要将ASCII字符转换成二进制数,输出时要将二进制数转换为ASCII字符,耗时较多


 


  fgets()函数


  函数原型:char *fgets(char *s,int n,FILE *fp);


  函数功能:该函数从fp所指的文件中读取字符串并在字符串末尾添加‘\0’,然后存入s,最多读n-1个字符,当读到回车换行符、到达文件尾或读满n-1个字符时,就停止读取


  函数返回该字符串的首地址,即指针s的值,读取失败返回空指针NULL


  (与gets()不同的是,fgets()从指定的流读取字符串,读到换行符时将换行符也作为字符串的一部分读到字符串中来)


 


  fputs()函数


  函数原型:fputs(_In_z_ const char * _Str, _Inout_ FILE * _File);


  str是要输出的字符串,fp是文件指针,字符串末尾'\0'不输出


  函数功能:将字符串输出到指针fp所指的文件中


  (与puts()不同的是,fputs()不会在写入文件的字符串末尾加上换行符'\n')


 


  fgetc()函数


  函数原型:int fgetc (FILE *fp);


  函数功能:用于从一个以只读或读写方式打开的文件上读字符,从fp所值的文件中读取一个字符,并将位置指针指向下一个字符,若读取成功,则返回该字符,


  若读取不成功则返回EOF(EOF是一个符号常量,stdio.h中定义为-1)


 


  fputc()函数


  函数原型:int fputc(int c, FILE *fp);


  fp是由函数fopen()返回的文件指针,c是要输出的字符(尽管C定义为in

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C语言 队列(循环队列) 下一篇C语言 队列(链式队列)

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目