C语言学习笔记---fseek()函数和ftell()函数

x33g5p2x  于2021-11-01 转载在 其他  
字(2.2k)|赞(0)|评价(0)|浏览(270)

fseek()函数

fseek()函数简单的理解,功能就是用来设置打开文件中光标的位置。比如默认打开一个文件后,光标在文件的最开始位置,但是好多时候操作文件的时候,不一定都是从最开始位置操作的。有时候需要在文件中间某个位置开始操作,有时候需要从文件结尾处开始操作。所以就需要一个专门设置文件中光标位置的函数。fseek()函数有三个参数,第一个参数是需要操作的文件指针,第二个参数是光标的偏移量,第三个参数为确定起点模式,也就是设置在文件中光标的起点位置。有以下几种情况:

  下面通过代码来演示fseek()函数的使用功能。

int main()
{
	FILE *in,*out;
	int ret;
	char ch;
	char str[30];
	
	/* 打开文件 */
	in = fopen("123.txt","r+");
	if(in == NULL)
		puts("打开失败!");
	else
		puts("打开成功!");
			
   fseek(in,0L,SEEK_SET);     
   fgets(str,10,in);
   puts(str); 
	
	/* 关闭文件 */
	ret = fclose(in);
	if(ret == 0)
		puts("关闭成功!");
	else
		puts("关闭失败!");

	system("pause");
	return 0;
}

使用fopen()函数打开文件后,用fseek()函数将光标设置在文件起始位置,光标偏移量为0,然后使用fgets()函数从当前位置开始读取10个字符,并将读取的字符打印出来。最后关闭文件。下面看程序执行的结果。

  可以看到打印的字符串是从文件头开始的。接下来修改fseek()函数如下:

fseek(in,10L,SEEK_CUR);

将光标偏移10个字符,然后接着使用fgets()函数从当前位置开始读取10个字符,并将读取的字符打印出来。输出结果如下:

  此时打印的字符是从b开始的,而b前面刚好10个字符,说明fseek()函数偏移指针是成功的。接下来继续修改代码。

fseek(in,-10L,SEEK_END);

将指针定位到文件末尾,然后向前偏移10个字符,这里的 -10L指的是向前偏移。如果是正数,则指针向文件末尾移动,如果是负数,则指针向文件头移动。这里将指针移动到末尾向前10个位置,接着打印10个字符,也就是打印的是文件中最后的10个字符。输出结果如下:

  fseek()函数是有返回值的,当偏移的位置没有超出范围则返回0,如果偏移的位置超出了文件的范围,则返回值为-1。

ftell()函数

ftell()函数主要用来读取,当前光标在文件中的位置。它的参数只有一个,就是需要读取的文件指针,返回值的类型是long,数字的大小代表当前光标距离文件起始处的字节数。

int main()
{
	FILE *in,*out;
	char ch;
	char str[30];
	long ret=0;

	/* 打开文件 */
	in = fopen("123.txt","r+");
	if(in == NULL)
		puts("打开失败!");
	else
		puts("打开成功!");

	ret = ftell(in);
	printf("%d\r\n",ret);

	/*移动到文件头*/
	fseek(in,0L,SEEK_SET);
	fgets(str,6,in);
	puts(str);

	ret = ftell(in);
	printf("%d\r\n",ret);

	/*在当前位置向后偏移6*/
	fseek(in,6L,SEEK_CUR);
	fgets(str,6,in);
	puts(str);

	ret = ftell(in);
	printf("%d\r\n",ret);

	/*移动到文件尾*/
	fseek(in,-6L,SEEK_END);
	fgets(str,6,in);
	puts(str);

	ret = ftell(in);
	printf("%d\r\n",ret);

	/* 关闭文件 */
	ret = fclose(in);
	if(ret == 0)
		puts("关闭成功!");
	else
		puts("关闭失败!");

	system("pause");
	return 0;
}

首先打开文件,使用ftell()函数打印当前光标位置,然后打印6个字符,接着再打印一次光标位置,将光标向后偏移6个字符,然后继续打印6个字符,打印完成再使用使用ftell()函数打印当前光标位置,最后将光标定位到文件结尾,然后向文件头移动6个字符,最后打印字符串最后6个字符。然后再打印一次光标位置。输出结果如下:

  文件打开后光标在字符1前面,打印6个字符,然后光标再向后移动6个字符,相当于光标从开始位置向后移动了12个字符。所以打印字符的时候就从c开始。最后将光标移动到倒数第6位,开始打印字符。fgets()函数中的第二个参数设置的是打印字符的数量,但是它默认会包含一个空字符。
所以设置打印的字符数是6,但是实际打印出来的字符只有5个,最后一个被空字符占了。

通过ftell()函数和fseek()函数的配合,就可以访问到文件中的任意一个位置处。提高了操作文件的灵活性。

相关文章

微信公众号

最新文章

更多