C语言 文件基本读写操作

C语言 文件读写操作

最近在写c语言课设,接触到很多新知识,所有在此记录自己的所得。
就不扯那么多底层的东西了,直接上相关知识

文件打开模式

打开模式说明(只读=就是只能读取,只写=就是只能写入)
w只写 的方式打开,并清空文件数据,若文件不存在则 新建文件
r只读 的方式打开,若文件不存在,则文件打开失败
a只写/追加 的方式打开,若文件不存在,则文件打开失败
w+读写 的方式打开,并清空文件数据,若文件不存在则新建文件
r+读写 的方式打开,若文件不存在,则文件打开失败
a+读写/追加 的方式打开,若文件不存在,则文件打开失败

打开二进制的,打开模式,同上,后面加个b:wb, rb , ab , wb + 。。。

文件操作函数

fopen()——打开文件

原型:FILE* fopen(char const* _FileName , char const* _Mode );

  1. fopen打开失败的原因:1,路径错误 。 2,文件不存在 。
形参说明
char const* _FileName文件的路径
char const* _Mode文件打开模式
返回值说明
FILE*文件指针
NULL文件打开失败

fclose()——关闭文件流

原型:int fclose( FILE* _Stream );

  1. 通常在文件操作完成后,使用fclose()来关闭文件流
  2. 文件光标指针返回第一行。
形参说明
FILE* _Stream已经打开的文件指针

fputs()——写入字符串

原型:int fputs( char const* _Buffer, FILE* _Stream );

  1. 如果你之前fopen打开的文件模式,不是只写,或者读写,编译器会报错
  2. 写入成功返回0 ,失败返回非零的值。
形参说明
char const* _Buffer传入一个自定义的字符数组,或指针
FILE* _Stream已经打开的文件指针

fgets()——获取文件内容

原型:char* fgets( char* _Buffer, int _MaxCount, FILE* _Stream);

  1. 要确保buffer数组的长度为1024,MaxCount也为1024.
  2. 函数第n次运行后,文件光标指针自动移到n+1行,下一次使用fgets,将在第n+1行读取数据

例如:没有使用fgets前,光标指针位置
在这里插入图片描述
使用fgets后,光标指针位置
在这里插入图片描述

形参说明
char* _Buffer传入一个自定义的字符数组,或指针
int _MaxCount最大字符数(1024)
FILE* _Streamt已经打开的文件指针

fscanf ()——格式化获取文件内容

原型:int fscanf ( FILE *fp, char * format, … );

  1. 跟 scanf 读取格式化的操作基本一样。
  2. 读取文件成功:返回参数列表中被成功赋值的参数个数。
形参说明
char * format传入格式化操作符:%d,%s,%f 之类的
FILE* _Streamt已经打开的文件指针

fprintf ()——格式化写入字符串

原型:int fprintf ( FILE *fp, char * format, … );

  1. 跟 printf 输出格式化的操作基本一样。
  2. 写入成功:返回成功写入的字符的个数,失败则返回负数。
形参说明
char * format传入格式化操作符:%d,%s,%f 之类的
FILE* _Streamt已经打开的文件指针

打开文件实例

我们用vs2017打开新建一个文件

//输入以下代码
#include <stdio.h>

int main() {
	//1.创建文件结构指针
	//2.传入test.txt这个相对路径下的文件
	//3.使用w操作符新建文件
	FILE *filepointer = fopen("test.txt","w");
	if (filepointer==NULL) {
		printf("文件打开失败");
	}
	else {
		printf("文件打开成功");
	}
	return 0;
}

然后点击运行工具栏的本地windows调速器运行代码,
会出现下图:
函数已经被废弃
这里我们要注意了,vs2017对一些函数进行了修改,像fopen,printf,scanf函数都被弃用。
解决方法——点击链接:https://blog.csdn.net/qq_31254489/article/details/105548474

解决函数不安全的问题后,得到结果:

在这里插入图片描述


读写文件实例

#include <stdio.h>

int main() {

	FILE *filepointer = fopen("test.txt","w+");
	if (filepointer==NULL) {
		printf("文件打开失败");
	}
	else {
		printf("文件打开成功\n");
		//fputs向文件写入字符串
		fputs("fputs测试\n",filepointer);
		//fprintf向文件写入字符串
		fprintf(filepointer, "fprintf测试(无参数)\n");
		fprintf(filepointer, "fprintf测试(有参数):%d,%s \n",1,"参数2");
		
	}
	//关闭文件
	fclose(filepointer);
	//以读写的方式打开文件
	filepointer = fopen("test.txt","r+");
	//创建缓冲区
	char buf[1024];
	//fget读取文件字符串,并将光标移到下一行
	fgets(buf, 1024, filepointer);
	printf("fputs输出:%s", buf);

	//fscanf读取文件字符串,并将光标移到下一行
	fscanf(filepointer,"%s", buf);
	printf("fscanf输出:%s\n", buf);

	fscanf(filepointer, "%s", buf);
	printf("fscanf输出:%s", buf);

	return 0;

}

运行得到结果:

在这里插入图片描述
使用fsancf要注意回车符"\n"的处理。

  • 7
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值