C语言中的文件操作.

老是忘记 记录一下方便自己查阅!

fseek函数是 用来设定文件的当前读写位置.

函数原型: int fseek(FILE *fp,long offset,int origin);

函数功能:把fp的文件读写位置指针移到指定的位置.

fseek(fp,20,SEEK_SET); 意思是把fp文件读写位置指针从文件开始后移20个字节.
SEEK_CUR(当前位置)、 SEEK_END(文件结尾)或 SEEK_SET(文件开头), 其中SEEK_SET,SEEK_CUR和SEEK_END的值依次为0,1和2

ftell函数是用来获取文件的当前读写位置;

函数原型: long ftell(FILE *fp)

函数功能:得到流式文件的当前读写位置,其返回值是当前读写位置偏离文件头部的字节数.

ban=ftell(fp); 是获取fp指定的文件的当前读写位置,并将其值传给变量ban.

fseek函数与ftell函数综合应用:

分析:可以用fseek函数把位置指针移到文件尾,再用ftell函数获得这时位置指针距文件头的字节数,这个字节数就是文件的长度.

#include <stdio.h>

int main(int argc,char *argv[])
{
	FILE *fp;
	char filename[80];
	long length;
	printf("输入文件名:");
	gets_s(filename);
	//以二进制读文件方式打开文件
	fp = fopen(filename, "rb");
	if (fp == NULL)
		printf("file not found!/n");
	else
	{
		//把文件的位置指针移到文件尾
		fseek(fp, 0L, SEEK_END);
		//获取文件长度;
		length = ftell(fp);
		//把文件的位置指针移到文件头
		fseek(fp, 0L, SEEK_SET);
		printf("该文件的长度为%1d字节/n", length);
		fclose(fp);
	}
	return system("pause");
}

fread
fread是一个函数,它从文件流中读数据,最多读取count个项,每个项size个字节,如果调用成功返回实际读取到的项个数(小于或等于count),如果不成功或读到文件末尾返回 0。
函数原型
size_t fread ( void *buffer, size_t size, size_t count, FILE *stream) ;
参 数
buffer 用于接收数据的内存地址
size 要读的每个数据项的字节数,单位是字节
count 要读count个数据项,每个数据项size个字节.
stream 输入流
返回值
返回真实读取的项数,若大于count则意味着产生了错误。另外,产生错误后,文件位置指示器是无法确定的。若其他stream或buffer为空指针,或在unicode模式中写入的字节数为奇数,此函数设置errno为EINVAL以及返回0.

size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);
返回值:返回实际写入的数据块数目
(1)buffer:是一个指针,对fwrite来说,是要获取数据的地址;
(2)size:要写入内容的单字节数;
(3)count:要进行写入size字节的数据项的个数;
(4)stream:目标文件指针;
(5)返回实际写入的数据项个数count。

int main()
{
	FILE *oufp = fopen("abin.txt", "wb+");
	FILE *infp = fopen("abin.txt", "rb+");
	//char buf[] = "abina";
	char bb[20] = "";
	//int len = strlen(buf);
	//fwrite(buf, 1, len, oufp);//写
	
	if (!feof(infp))
	{
		int aa = fread(bb, 1, 4, infp);//读
		int c = fgetc(infp);//读取一位字节并把当前光标往后移一位
		printf("bb=%c.%c\n", c, bb[0]);
	}
	
	//fseek(oufp, 0L, SEEK_SET);//在流中重定向
	//int c = fgetc(oufp);
	printf("bb=%c.\n", bb[0]);
	return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值