关于文件操作函数的使用

目录

文件指针:

fopen、fclose函数的使用:

顺序读写函数:

随机读写函数:

文件读取结束判定的误区:

文件指针:

“文件类型指针”又简称为“文件指针”,每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息,这些信息是保存在一个结构体变量中的。该结构体类型是由系统声明的,取名为:FILE

FILE* pf;  //文件指针变量

定义pf是一个指向FILE类型数据的指针变量。可以使pf指向某个文件的文件信息区,通过该文件信息区中的信息就能够访问该文件。

fopen、fclose函数的使用:

文件在读写之前应该先打开文件,在使用结束之后应该关闭文件。

在编写程序的时候,在打开文件的同时,都会返回一个FILE*的指针变量指向该文件,也相当于建立了指针和文件的关系。

fopen:打开文件

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

fclose:关闭文件

int fclose(FILE * stream);

具体使用:

int mian()
{
	//打开文件,并对文件进行写入操作
	FILE *pf = fopen("date.txt", "w");
	//若未能正常打开文件,报错并返回
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}

	//对文件进行操作
    //…

	//关闭文件,并将pf置为空指针
	fclose(pf);
	pf = NULL;

	return 0;
}

顺序读写函数:

功能函数名适用于
字符输入函数fgetc所有输入流
字符输出函数fputc所有输出流
文本行输入函数fgets所有输入流
文本行输出函数fputs所有输出流
格式化输入函数fscanf所有输入流
格式化输出函数fprintf所有输出流
二进制输入函数fread文件输入流
二进制输出函数fwrite文件输出流

字符输入/输出函数:

int fgetc(FILE * stream);

int fputc(int character, FILE * stream);

文本行输入/输出函数:

char * fgets(char * str, int num, FILE * stream);

int fputs(const char * str, FILE * stream);

格式化输入/输出函数:

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

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

二进制输入/输出函数:

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

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

随机读写函数:

fseek:

根据文件指针的位置和偏移量来定位文件指针。

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

对于参数3的选项(即在文件中光标的起始位置)有三个选项:

1.SEEK_SET        //文件的起始位置

2.SEEK_CUR       //文件当前指针的位置

3.SEEK_END       //文件的末尾

int main()
{
	FILE * pf = fopen("test.txt", "wb");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}

	fputs("Hello World.", pf);

    //通过fseek函数用SEEK_SET将光标移动到6(W)的位置
	fseek(pf, 6, SEEK_SET);
    //改写文本文件
	fputs("Hello", pf);

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

编译完成后文本文件test.txt的内容(Hello World.)会被改换成(Hello Hello.)这就是通过fseek函数更改光标(指针)位置,然后对文件进行其他操作。

ftell:

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

long int ftell(FILE * stream);

int main()
{
	FILE * pf = fopen("test.txt", "wb");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}

	fputs("Hello World.", pf);
	//通过fseek函数将光标更改到6的位置
	fseek(pf, 6, SEEK_SET);

	//再通过ftell函数获取文件指针相对于起始位置(0)的偏移量
	int ret = ftell(pf);
	printf("%d\n", ret);//输出结果为6

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

rewind:

让文件指针的位置回到文件的起始位置

void rewind(FILE * stream);

int main()
{
	FILE * pf = fopen("test.txt", "wb");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}

	fputs("Hello World.", pf);
	//通过fseek函数将光标更改到6的位置
	fseek(pf, 6, SEEK_SET);

	//用rewind函数将光标位置回到文件起始位置
	rewind(pf);
	
	//通过ftell函数获取当前指针位置相对于起始位置的偏移量
	int ret = ftell(pf);
	printf("%d\n", ret);//输出结果为0

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

文件读取结束判定的误区:

feof函数:

当文件读取结束的时候,判断是读取结束的原因是否是因为遇到文件末尾结束。

所以,在文件读取过程中,不能用feof函数的返回值直接来判断文件的是否结束。

1.文本文件的读取:

文本文件读取是否结束,判断返回值是否为 EOF ( fgetc ),或者 NULL ( fgets )。

2.二进制文件的读取

fread判断返回值是否小于实际要读的个数(对于fread函数来讲,要求读取num个大小为size字节的数据,如果真的读取到num个数据,函数返回num,如果没有读取到num个数据,返回的是真实的读取到的完整的数据个数)

ferror – 在文件读取结束后,用来判断文件是否因为在读取过程中遇到错误而结束!如果是,则返回一个非零的值

feof - 在文件读取结束后,用来判断文件是否因为在读取过程中遇到文件结束标志而结束!这种属于正常结束

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值