C语言文件操作

本文详细介绍了C语言中文件操作的基础知识,包括fopen、fclose等函数的使用方法,以及如何利用fgetc、fputc进行字符级别的读写操作。此外还讲解了fputs、fgets、fprintf、fscanf等函数的应用场景,并提供了读写二进制文件的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1  fopen 函数:
作用:打开了文件,并返回一个指向文件头的FILE类型指针
用法:
FILE *p = fopen("test1", "w+");//以"w+" 模式打开文件test1
打开方式:
“r” :可读,文件不存在会报错
“r+”:可读写,文件不存在会报错
“w”:可写,该模式会先清空文件,如果文件不存在,会创建该文件
“w+”:可读写,该模式会先清空文件,如果文件不存在,会创建该文件
“a”:追加、可写,指针指向文件尾部,写入内容就追加在文件尾部, 保留原来的文件结尾的EOF 符, 如果文件不存在,会创建该文件
“a+":追加、可读写,写入内容就追加在文件尾部, 不保留原来EOF符 ,如果文件不存在,会创 建该文件,可以读取文件
加'b'模式同上上面的效果一样,只是以二进制模式打开文件的 , Linux  只有一种文件类型,带b与不带b 的一样的!

2 getc() 与 putc() 函数 
getc():从文件中读取一个字符,并将指针移向下一个字符指针
 ch = getc() //从标准输入获取一个字符
 ch = getc(fp);//fp 是一个文件指针,从文件指针所指的文件中获取一个字符
putc() :将字符写进一个文件, 
putc(ch,fp);//将ch写到fp所指的文件中去

3 EOF:文件结尾
ch = getc(fp) == EOF 表示文件已经读取到结尾

4 fclose(): 关闭文件指针
fclose(fp) :关闭文件打开的指针,关闭成功返回0;

5 标准文件指针
a stdin :标准输入
b stdout :标准输出 
c stderr:标准错误

6 fgetc() 与 fput(c) 以及rewind() 的用法:
fgetc() :从文件中读取一个字符
用法 :char c = fgetc(fp);
fputc() :向文件写与一个字符
用法:fputc(c,fp);//将字符写进文件
rewind(fp); //让fp指针回到文件开始位置

7 fputs()与fgets()函数 以及 feof():
fgets():读取的字符串最大长度-1 个字符,或者读到第一个换行符后面,或者读到文件结尾
用法:
fgets(s,MAX,fp);//读取指针fp的内容到s字符串,最多读取MAX-1个,当s超出长度时不会报错
fputs():将字符串放入文件
用法:
fputs("helloworld1\n", fp);//将前面的字符串放入文件中
feof(fp); 判断文件fp是否已经到了文件结尾,如果是,返回真

1 - 7 示例程序 
#include <stdio.h>
#define MAX 1000

int main()
{
	int cnt = 0;
	char ch = 'A';
	char s[MAX] = {0};
	FILE *fp; //定义一个指向file的指针 
	fp = fopen("test1.txt", "w+");
	if (fp == NULL) //打开文件失败的时候会返回一个NULL指针
	{
		fprintf(stdout, "test1 not opened!\n"); //此时与等价,printf("test1 not opened!\n");
		exit(1);
	}
	/*
	向文件中写与三行数据
	*/
	fputs("helloworld1\n", fp);
	fputs("helloworld2\n", fp);
	fputs("你好世界!\n", fp);//写入中文时有点问题
	fputc(ch,fp); //向文件中写一个字符'A'

	//使用fputc() ,fgetc() 函数来操作文件:,fgetc() 每次读取文件中的一个字符;
	rewind(fp); //使文件指针重新指向文件头
	ch = fgetc(fp);//使用fgetc() 读取文件中的fp所在位置的字符 并fp++
	while (ch != EOF)
	{
		putchar(ch);//打印字符
		ch = fgetc(fp);
	}

	rewind(fp); //使文件指针重新指向文件头
	//fgets(s ,MAX,fp);//使用fgets() 读取文件中的一行数据,包括换行符 并将fp 指向下一行
	while (!feof(fp)) //feof() 判断文件是否到了结尾,如果是,返回真!feof(fp) 表示取反
	{
		fgets(s, MAX, fp);//使用fgets() 读取文件中的一行数据,包括换行符 并将fp 指向下一行
		printf("%s", s);
	}
	//printf("\n%s", s);
	fclose(fp);
	return 0;
}


8 fprintf() 与 fscanf() 函数:
fprintf() : 与printf() 用法相同,只是输入对象不同,printf()输出对象是屏幕,fprintf()输出对象是文件:
fprintf(fp,"helloworld") //(fp : 文件指针 ) 将字符串写入到fp 指向文件中
printf与fprintf()的等价用法:fprintf(stdout,"helloworld") <=> printf("helloworld")

fscanf () : 与 scanf () 用法相同,只是输入对象不同, scanf ()输入对象是屏幕,f scanf ()输入对象是文件:
fscanf(fp,"%s",s) //(fp : 文件指针 ) 将fp指向的文件内容写入到s字符串中遇到换行结束
 fprintf() 与 fscanf() 等价用法:fprintf(stdin,"%s",s) <=> scanf("%s",s)

9 fread() 与 fwrite() : 读写二进制文件
windows 系统中文件都换行都是以\r,\n结尾的,
以"rb"模式打开文件,文件行尾为是/r/n
以"r"模式打开文件,行尾是\n
fread() 与 fwrite()示例:
代码:
#include <stdio.h>
#define MAX 1000

int main()
{
	FILE *fp = fopen("test.txt", "wb"); //以二进制读打开一个空文件
	char buf[4] = { 0 };//定义字符串的缓存的时候每次清空是一个好习惯
	buf[0] = 'a';
	buf[1] = 'b';
	buf[2] = '\n';
	buf[3] = 'd';
	fwrite(buf, sizeof(char), sizeof(buf), fp);//buf:缓存区,第二个参数:每次写入的最小单位;第三个函数:写入数量; 第四个参数:写入文件的文件指针
	fclose(fp);
	FILE *fp1 = fopen("test.txt", "rb"); //以二进制文件模式打开文件
	char buf1[1024] = {0};//定义字符串的缓存的时候每次清空是一个好习惯
	size_t ret = fread(buf1, sizeof(char), sizeof(buf1), fp1); //buf:缓存区,第二个参数:每次读的最小单位;第三个函数:读取数量; 第四个参数:读取的文件指针
	printf("ret = %u\n", ret);//fread() 会返回一个无符号int类型值
	for (int i = 0; i < ret; i++)
	{
		printf("buf[%d] = %x\n", i, buf1[i]);//
	}
	printf("%s", buf1);
	fclose(fp1);
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

crystalnsd

万水千山总是情,支持一下行不行

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值