【C语言】_文件内容操作:随机读写

发布于:2024-04-06 ⋅ 阅读:(77) ⋅ 点赞:(0)

目录

1. fseek

1.1  随机读文件

1.2  随机写文件

2. ftell

3. rewind


当以读方式打开一个存在且存有内容的文件时,文件指针会默认指向第一个元素。以在test4.txt文件中存储abcdef为例:

int main()
{
	//打开文件
	FILE* pf = fopen("E:\\C_文件操作\\C_文件操作\\test4.txt", "r");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	//读文件
	int ch = fgetc(pf);
	printf("%c\n", ch);
	//关闭文件
	fclose(pf);
	pf = NULL;
	return 0;
}

此时会打印文件的第一个元素a:

为了实现文件的随机读写,介绍一下三个函数: 

1. fseek

fseek函数根据文件指针的位置和偏移量来定位文件指针

1.1  随机读文件

int main()
{
	//打开文件
	FILE* pf = fopen("E:\\C_文件操作\\C_文件操作\\test4.txt", "r");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	//读文件
	int ch = fgetc(pf);  //a
	printf("%c\n", ch);

	ch = fgetc(pf);  //b
	printf("%c\n", ch);

	//此时文件指针已定位在c的位置
	fseek(pf, 2, SEEK_CUR);
	ch = fgetc(pf);   //e
	printf("%c\n", ch);

	fseek(pf,-2,SEEK_END);
	ch = fgetc(pf);   //f
	printf("%c\n", ch);

	fseek(pf, 6, SEEK_SET);
	ch = fgetc(pf);   //g
	printf("%c\n", ch);
	
	//关闭文件
	fclose(pf);
	pf = NULL;
	return 0;
}

 输出结果为:

1.2  随机写文件

int main()
{
	//打开文件
	FILE* pf = fopen("E:\\C_文件操作\\C_文件操作\\test5.txt", "w");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	//随机写文件
	fputc('a', pf);
	fputc('b', pf);
	fputc('c', pf);
	fputc('d', pf);
	fseek(pf, -3, SEEK_CUR);
	fputc('w', pf);
	//关闭文件
	fclose(pf);
	pf = NULL;
	return 0;
}

输出结果为:

注意只能修改不能插入;

2. ftell

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

int main()
{
	//打开文件
	FILE* pf = fopen("E:\\C_文件操作\\C_文件操作\\test5.txt", "w");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	//随机写文件
	fputc('a', pf);
	fputc('b', pf);
	fputc('c', pf);
	fputc('d', pf);
	fseek(pf, -3, SEEK_CUR);
	fputc('w', pf);

	long pos = ftell(pf);
	printf("%ld\n", pos);

	//关闭文件
	fclose(pf);
	pf = NULL;
	return 0;
}

输出结果为:

3. rewind

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

int main()
{
	//打开文件
	FILE* pf = fopen("E:\\C_文件操作\\C_文件操作\\test5.txt", "w");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	//随机写文件
	fputc('a', pf);
	fputc('b', pf);
	fputc('c', pf);
	fputc('d', pf);
	fseek(pf, -3, SEEK_CUR);
	fputc('w', pf);
	rewind(pf);

	long pos = ftell(pf);
	printf("%ld\n", pos);

	//关闭文件
	fclose(pf);
	pf = NULL;
	return 0;
}

 输出结果为: