C语言文件随机读写

C语言文件随机读写,第1张

文件随机读写 fseek:

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

根据文件指针的位置和偏移量来定位文件指针.(重新定位流位置指示器)

stream:指向标识流的文件对象的指针

offset:二进制文件:从原点偏移的字节数。


文本文件:零或ftell返回的值。


(向前偏移则是负数,向后偏移是正数)

origin:用作偏移量参考的位置。


它由< cstdio >中定义的下列常量之一指定,专门用作此函数的参数:

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

返回值:如果成功,该函数返回零。


否则,它返回非零值。


如果发生读或写错误,则设置错误指示器(ferror)

ftell:

long int ftell ( FILE * stream );

返回流的位置指示器的当前值。


即返回当前文件指针距头部的偏移量

返回值:如果成功,则返回位置指示器的当前值。


失败时,返回-1L,errno设置为特定于系统的正值

rewind:

void rewind ( FILE * stream );

将流的位置设置到开头

实际例子:
int main()
{
	//fseek
	FILE* pf = fopen("test.txt", "r");	//abcde
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	int ret = fgetc(pf);		//文件指针一开始指向文件头部,输出a后向后移了一个字节
	printf("%c\n", ret);	//a
	fseek(pf, 2, SEEK_CUR);		//将文件指针在当前位置向后偏移两个字节
	ret = fgetc(pf);
	printf("%c\n", ret);	//d
	fseek(pf, -3, SEEK_END);	//将文件指针从文件尾开始向前偏移3个字节
	ret = fgetc(pf);
	printf("%c\n", ret);	//c
	fseek(pf, 1, SEEK_SET);		//将文件指针从文件头开始向后偏移1个字节
	ret = fgetc(pf);
	printf("%c\n", ret);	//b
	
	//尝试将文件指针移出字符串
	printf("%d\n", fseek(pf, 2, SEEK_END));	//0 将文件指针从文件尾开始向后偏移2个字节,输出0,说明移动成功了
	printf("%d\n", ftell(pf));		//7	此时文件指针已经指向字符串结尾的后两个字节处,相对于头部位置偏移量为7

	printf("%d\n", fseek(pf, -2, SEEK_SET));//-1 将文件指针从文件头开始向前偏移2个字节,输出-1,说明移动失败了
	printf("%d\n",ftell(pf));	//7	上一步移动失败,所以文件指针距头部偏移量没有变
    
    rewind(pf);			//将文件指针调到开头
	printf("%d", ftell(pf));	//0	
    
	free(pf);
	pf = NULL;
	return 0;
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/568744.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-09
下一篇 2022-04-09

发表评论

登录后才能评论

评论列表(0条)

保存