C语言|文件操作​ 超详细(参考cplusplus.com)​

知识储备:

知识点一:文件的类型可分为程序文件和文本文件(.txt),其中程序文件又可分为源文件(.c),目标文件(.obj),可执行性文件(.exe)。

知识点二:C程序在运行时会默认打开三个流,分别为标准输入流(stdin)、标准输出流(stdout)、标准错误流(stderr)。流可以理解为所有的设备输入和输出的数据汇聚成的流;这里打个比方:scanf这个函数完整的理解是从标准输入流中格式化输入数据,而printf完整的理解是从标准输出流中格式化输出数据。

知识点三:文件名=文件路径+文件名主干+文件后缀;

文件操作的流程:

打开文件:关键函数:fopen

FILE * fopen ( const char * filename, const char * mode ); 

该函数第一个参数为绝对文件名,可以在文件中的属性参看。第二个参数为操作类型例如:r,w。

注意文件操作的读和写是相对程序的流而言。例如读是从程序的流输入数据到文件中,而写则是从文件的流中写入数据到程序中;

返回的为一个FILE结构体类型的指针,FILE控制着一个文本信息区,文本信息区包含文件的地址,文件本,文件的内容;

读/写文件:使用不同的操作函数对指针进行操作,可以对文件实行不同的读和写,下面会具体介绍。

在文件操作前还需检验指针是否为空,如下:

#include<stdio.h>
int main()
{
	FILE* pf = fopen("data.txt", "w");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}

	fclose(pf);
	pf = NULL;
	return 0;
}

关闭文件:关键函数:fclose

int fclose ( FILE * stream ); 记得野指针置空

文件操作函数:

顺序读写:

1.字符输入函数:fgetc

int fgetc ( FILE * stream );  该函数从流中读取一字符,适用于所有输入流,返回一个函数;

2.字符输出函数:fputc

int fputc ( int character, FILE * stream ); 该函数往流中添加一个字符,适用于所有输出流;

3.文本行输入函数:fgets

char * fgets ( char * str, int num, FILE * stream );该函数从流中提取一行总数为num的字符串,直到遇到\n结束,适用于所有输入流;

4.文本行输出函数:fputs

int fputs ( const char * str, FILE * stream );该函数往流中输入一行字符,多次操作自动换行,适用于所有输出流:

5.格式化输入函数:fscanf

int fscanf ( FILE * stream, const char * format, ... );该函数从输入流中提取不同样式的数据,适用于所有输入流;若此时输入流为标准输如流(Stdin),则相当于scanf;

6.格式化输出函数:fprintf

int fprintf ( FILE * stream, const char * format, ... );该函数往输出流中添加不同样式的数据,适用于所用输出流;若此时输出流为标准输出流(Stdout),则相当于printf;

7.二进制输入:fread

size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );该函数从流stream中得到个数为count,大小为size的数据到ptr中,适用于文件,返回的是真实得到数据的个数;

注意此时fopen的mode参数为"rb";

8.二进制输出:fwrite

size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream );该函数从数据ptr中输入个数为count大小为size的数据到流stream中,返回的是真实输入数据的个数;

注意此时fopen的mode参数为"rw";

随机读写:

1.fseek 根据文件指针的位置和偏移量来定义文件指针;

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

stream表示文件指针;offset表示偏移量,正数表示向右偏移,负数表示向左偏移;origin有三种状态,SEEK_SET表示文件的起始位置,SEEK_CUR表示文件指针的当前位置,SEEK_END表示文件的末尾位置;

2.ftell 返回文件指针相对于起始位置的偏移量;

long int ftell ( FILE * stream );

3.rewind 将文件指针回到文件的起始位置;

文件读取结束的判定

在文件读取的过程中不能用feof函数的返回值来判断文件的读取是否结束,feof的作用是当已经知道文件读取结束时,判断是否是因为遇到文件尾结束;、

第一种判断方法:fgetc的返回值是否为EOF;

第二种判断方法:fgets的返回值是否为NULL;

第三张判断方法:fread的放回值是否小于实际要求的个数;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值