C语言文件操作

目录

 

文件操作的流程:

1.fopen()

2.fclose()

3.fwrite()

4.fread()

5.fprintf()

6.fseek()

7.ftell()

8.rewind

9.feof()

10.ferror()

 


文件操作的流程:

打开文件或者建立并且打开文件

读取或者写入数据

关闭文件

接下来就介绍一下c语言中一些常见的文件操作函数:

1.fopen()

函数声明:FILE * fopen(const char * path,const char * mode)

在调用fopen以后该函数会返回一个FILE*类型的指针,指向该文件(调用成功)。如果失败则会返回NULL;

用法:fopen("目标文件路径.文件类型","文件使用方式");

如: 打开文件 "TEST.DAT"  ,写下其目录 "C:\\TC\\TEST.DAT"

注意:如果将路径写成 "C:\TC\TEST.DAT"  是不正确的, 这一点要特别注意。

	FILE*fp = fopen("C:\\TC\\TEST.DAT", "r");
	fclose(fp);
文件使用方式含义如果指定文件不存在
"r"(只读)为了输入数据,打开一个已经存在的文本文件出错
"w"(只写)为了写入数据,打开一个文本文件建立一个新的文本文件
"a"(追加)文本文件尾添加数据出错
"rb"(只读)为了读取数据,打开一个二进制文件

出错

"wb"(只写)为了写入数据,打开一个二进制文件建立一个新的二进制文件
"ab"(追加)向一个二进制文件尾添加数据出错
"r+"(读写)为了读和写打开一个文本文件出错
"w+"(读写)为了读和写打建立一个新的文本文件建立一个新的文本文件
”a+“(读写)打开一个文本文件,在文本文件尾进行读写建立一个文本文件
"rb+"(读写)为了读和写,打开一个二进制文件出错
"wb+"(读写)为了读和写,建立一个二进制文件建立一个新二进制文件
"ab+"(读写)打开一个二进制文件,在文件尾进行读和写建立一个新二进制文件

 

 

 

 

 

 

 

 

 

 

 

 

 

注意:

  1. 用“w”打开的文件只能向该文件写入。 若打开的文件不存在,则以指定的文件名建立该文件,若打开的文件已经存在,则将该文件删去,重建一个新文件。
  2. 若要向一个已存在的文本文件追加新的信息,只能用“a ”方式打开文件
  3.  把一个文本文件读入内存时,要将ASCII码转换成二进制码, 而把文件以文本方式写入磁盘时,也要把二进制码转换成ASCII码,因此文本文件的读写要花费较多的转换时间。对二进制文件的读写不存在这种转换

2.fclose()

2. fclose()函数   fclose()函数用来关闭一个由fopen()函数打开的文件 , 其调用格式为:   nt fclose(FILE *stream);  

当文件关闭成功时, 返回0, 否则返回一个非零值。

每当我们使用fopen()打开一个文件 进行操作以后,必须要记得关闭文件。

3.fwrite()

原型:size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream) 

ptr: -------------------------------  指向需要被写入元素的地址

size_t :------------------------  被写入元素的单个元素大小(以字节为单位)

nmemb--------------------------  被写入的元素数量

stream  -------------------------- 被写入的文件的文件指针(FILE*类型)(输出流)

② 返回值:该函数返回被写入的元素数量,该对象是一个整型数据类型。

写入二进制文件

4.fread()

函数原型:  size_t   fread(   void   *buffer,   size_t   size,   size_t   count,   FILE   *stream   ) 

  1. buffer-----------  指向被写入到的取元素的地址
  2. size ------------- 被读取的单个元素大小(以字节为单位) 
  3. count  ---------- 被读取的元素数量 
  4. strean --------   被读取的文件的文件指针

返回值:返回读取的元素个数

fread可以读二进制文件,有时用字符方式去读文件不能读完整个文件,但是二进制方式就可以 。这就是因为字符方式用特定的标记结尾的,读取时只要碰到该标记就自动结束

5.fprintf()

函数原型:

int fprintf(FILE * stream,const char * format,...);

相信大家都会使用printf函数,这里只需在函数调用最前面加上文件指针,就可以像王屏幕输出输出数据那样往文件中写入数据

如:

	int a = 1;
	int b = 2;
	FILE*fp = fopen("text.txt", "w");
	fprintf(fp, "hellow world:%d\nhellow world:%d", a, b);

这样使用后得到如下结果

 

6.fseek()

这个函数使用很单纯,函数原型:

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

stream--------  输入流(地址)

offset  --------  偏移量

origin  --------  起始位置

用法:简单来说,就是以文件stream的origin为起点,offset来设置当前文件的读写位置

origin有三个选项

SEEK_SET文件开头
SEEK_CUR文件指针的当前位置
SEEK_END文件结束*

offset可以为 正 负 和0

7.ftell()

返回值:当前读写位置相对于起始(文件开头)位置的偏移量

使用方法:ftell(文件指针);

8.rewind

函数原型:

void rewind(FILE * stream);

:将文件读写位置移动到文件起始位置

9.feof()

①如果文件  没有结束返回0,结束了返回非零

1.对于文件来说,无论是空文件,还是存有信息的文件,当文件被打开,光标处于默认的开头时,光标后都有信息,这时候调用feof()来查看光标后是否还有内容,就没意义。

2.所以我们需要从相同中找不同,先使用getc(),从文件中读取一个字符,让光标向后移动一个字符。这时空文件的光标就已经移动到EOF的后面,这时使用feof()就会返回1了。这才是feof()的正确用法。
3.但是要注意,一定要将光标回到文件的开头,因为之前判断文件是否为空时,将光标向前移动了一位,必须要将光标恢复到开头,这样才能保证文件的正常读取。

feof函数使用参考这位博主:

https://blog.youkuaiyun.com/konghouy/article/details/80530937

10.ferror()

当我们读取文件时,有两种情况会结束读取,一种是文件读取完毕,一种是文件读取出错。如果只用feof无法发区分这两种情况,这时候我们就需要用到  ferror()

②返回值:当文件读取出错时返回非0,不出错则返回0;

参考这位i博主

https://blog.youkuaiyun.com/u010154760/article/details/45074695

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值