C语言文件操作(简易版)

一、文件的打开和关闭

1.1文件的打开

c语言标准定义:

返回类型为FILE*类型的文件指针,返回初始地址

filename --> 存放打开文件的位置

node --> 文件打开的方式

使用到的头文件

打开方式:

1.2文件的关闭

1.3文件的打开和关闭使用格式

int main()
{
	//打开文件
	FILE* pf = fopen("测试.txt", "w");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	//……
	//关闭文件
	fclose(pf);
	pf = NULL;
	return 0;
}

二、文件的随机读写

2.1fseek--更改文件指针位置

C语言标准定义:

stream --> 存放文件地址的流

offset --> 偏移量(相对origin的偏移量)

origin --> 有三个选项  1.SEEK_CUR -文件指针当前的位置  

                                    2.SEEK_END - 文件末尾位置

                                    3. SEEK_SET -文件开始位置

用于将文件指针修改位置

eg.

int main()
{
	//打开文件--w
	FILE* pfw = fopen("测试.txt", "w");
	if (pfw == NULL)
	{
		perror("fopen");
		return 1;
	}
	char arr[] = "abcdef";
	//存放字符串
	fputs(arr, pfw);
	//关闭文件
	fclose(pfw);
	pfw = NULL;
	//打开文件--r
	FILE* pfr = fopen("测试.txt", "r");
	if (pfr == NULL)
	{
		perror("fopen");
		return 1;
	}
	printf("%c\n", fgetc(pfr));

	fseek(pfr, -2, SEEK_END);

	printf("%c\n", fgetc(pfr));
	fclose(pfr);
	pfr = NULL;

	return 0;
}

结果:

2.2ftell--文件指针相对于起始位置的偏移量

C语言标准定义:

eg.

int main()
{
	//打开文件--r
	FILE* pfr = fopen("test.txt", "r");
	if (pfr == NULL)
	{
		perror("fopen");
		return 1;
	}
	int size1 = ftell(pfr);
	printf("size:%d\n", size1);

	//test.txt存放了abcdef此时指针在f的后面

	fseek(pfr, -1, SEEK_END);//-1的偏移量向左移动一格abcde f
	printf("%c\n", fgetc(pfr));//读取此时指针的内容,读完后指针自动向后移动一格abcdef

	int size = ftell(pfr);//相对于起始位置偏移量为6
	printf("size:%d\n", size);

	fseek(pfr, -(size-1), SEEK_END);//a bcdef
	printf("%c\n", fgetc(pfr));

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

结果:

2.3rewind--指针回到起始位置

C语言标注定义:

eg.

int main()
{
	//打开文件--r
	FILE* pfr = fopen("test.txt", "r");
	if (pfr == NULL)
	{
		perror("fopen");
		return 1;
	}
	//测试与起始位置的偏移量
	int size1 = ftell(pfr);
	printf("size:%d时,对应读取字符%c\n", size1, fgetc(pfr));

	//test.txt存放了abcdef,此时指针在f的后面
	fseek(pfr, -1, SEEK_END);//-1的偏移量向左移动一格abcde f
	//测试与起始位置的偏移量
	int size2 = ftell(pfr);
	printf("与起始位置的偏移量size:%d 读取内容%c\n", size2, fgetc(pfr));
	//读取此时指针的内容,读完后指针自动向后移动一格abcdef
	//使文件指针回到文件起始位置rewind
	rewind(pfr);

	//测试与起始位置的偏移量
	int size3 = ftell(pfr);
	printf("size:%d时,对应读取字符%c\n", size3, fgetc(pfr));

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

结果:

2.4feof--文件读取结束判定

该函数用在文件已经结束,判断文件是否正常结束--用于判断文件结束的原因

int main()
{
	//打开文件-w
	FILE* pfw = fopen("test1.txt", "w");
	if (pfw == NULL)
	{
		perror("fopen-w");
		return 1;
	}
	//写入abcdef
	char arr[] = "abcdef";
	fputs(arr,pfw);
	//关闭文件
	fclose(pfw);
	pfw = NULL;
	//打开文件-r
	FILE* pfr = fopen("test1.txt", "r");
	if (pfr == NULL)
	{
		perror("fopen-r");
		return 1;
	}
	int n = 0;
	while(fgetc(pfr)!=EOF)
	printf("%d ",++n);
	//abcdef全部检测完后到达文件末尾,文件指针此时指向EOF
	printf("\n");
	//使用feof检测是否正确到达EOF
	if (feof(pfr)) {
		printf("fgetc返回了EOF");
	}
	else printf("fgetc没有返回了EOF");
	//关闭文件
	fclose(pfr);
	pfr = NULL;
	return 0;
}

结果:

1.这里fgetc到达返回EOF    fgets返回NULL

2.二进制文件的读取结束判断,判断返回值是够小于实际要读的个数 eg。fread判断返回值是否小于实际要读个数

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值