C语言之文件的读写(1)

前面三部分已经给大家介绍过了,网址发给大家方便大家复习
打开方式如下:
文件使用方式 含义 如果指定文件不存在
“r”(只读) 为了输入数据,打开一个已经存在的文本文件 出错
“w”(只写) 为了输出数据,打开一个文本文件 建立一个新的文件
“a”(追加) 向文本文件尾添加数据 建立一个新的文件
“rb”(只读) 为了输入数据,打开一个二进制文件 出错
“wb”(只写) 为了输出数据,打开一个二进制文件 建立一个新的文件
“ab”(追加) 向一个二进制文件尾添加数据 建立一个新的文件
“r+”(读写) 为了读和写,打开一个文本文件 出错
“w+”(读写) 为了读和写,建议一个新的文件 建立一个新的文件
“a+”(读写) 打开一个文件,在文件尾进行读写 建立一个新的文件
“rb+”(读写) 为了读和写打开一个二进制文件 出错
“wb+”(读写) 为了读和写,新建一个新的二进制文件 建立一个新的文件
“ab+”(读写) 打开一个二进制文件,在文件尾进行读和写 建立一个新的文件

实例代码:

/* fopen fclose example */
#include <stdio.h>
int main ()
{
    
    
  FILE * pFile;
  //打开文件
  pFile = fopen ("myfile.txt","w");
  //文件操作
  if (pFile!=NULL)
 {
    
    
    fputs ("fopen example",pFile);
    //关闭文件
    fclose (pFile);
 }
  return 0;
}

4. 文件的顺序读写

4.1 顺序读写函数介绍

功能 函数名 适用于
字符输入函数 fgetc 所有输入流
字符输出函数 fputc 所有输出流
文本行输入函数 fgets 所有输入流
文本行输出函数 fputs 所有输出流
格式化输入函数 fscanf 所有输入流
格式化输出函数 fprintf 所有输出流
二进制输入 fread 文件
二进制输出 fwrite 文件

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//#include<stdlib.h>
#include<errno.h>
#include<string.h>
int main()
{
    
    
	FILE* pf = fopen("test.txt", "w");//定义一个变量pf,pf指向这个文件信息区,文件信息区和文件本身相关联,这时候我们就可以读或者写或者对文件做一些其他的事情等等
	if (pf == NULL)
	{
    
    
		printf("%s\n", strerror(errno));
		return 1;
	}
	//写文件
	//......
	//关闭文件
	fclose(pf);
	pf = NULL;//设置成空指针使其再也找不到这块空间
	return 0;
}

这里有同学可能会问,为什么要关闭pf所指向的这个文件呢?
这是因为文件也是资源,最后你把文件关闭掉也就是将资源释放掉了,一个程序能打开的文件个数是有数的,并不是说可以无限打开,我打开之后关闭了以便我后期打开更多的文件,而且如果你不关闭这个文件可能会造成数据的丢失等等,所以一定要关闭文件并且置为NULL
fputc函数
在这里插入图片描述
大家来看代码

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//#include<stdlib.h>
#include<errno.h>
#include<string.h>
int main()
{
    
    
	FILE* pf = fopen("test.txt", "w");
	if (pf == NULL)
	{
    
    
		printf("%s\n", strerror(errno));
		return 1;
	}
	char i = 0;
	for (i = 'a'; i <= 'z'; i++)
	{
    
    
		fputc(i, pf);
	}
	//写文件
	//......
	//关闭文件
	fclose(pf);
	pf = NULL;//设置成空指针使其再也找不到这块空间
	return 0;
}

大家可以将代码拷贝一份去自己测试一下
这个时候我们再打开test.txt文件来看一看我们刚才的26个字母是否都已经写到文件里面了
在这里插入图片描述
大家看,结果属实
现在我们要以字符的形式将我的我的文件里的字符都拿出来,这个时候就要用到fgetc函数

fgetc函数
在这里插入图片描述
在这里插入图片描述
简言之,如果读到一个错的字符就返回EOF
现在我们来看代码

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//#include<stdlib.h>
#include<errno.h>
#include<string.h>
int main()
{
    
    
	FILE* pf = fopen("test.txt", "r");
	if (pf == NULL)
	{
    
    
		printf("%s\n", strerror(errno));
		return 1;
	}
	int ch = 0;
	while ((ch = fgetc(pf)) != EOF)
	{
    
    
		printf("%c ", ch);
	}
	//char i = 0;
	//for (i = 'a'; i <= 'z'; i++)
	//{
    
    
	//	fputc(i, pf);
	//}
	//写文件
	//......
	//关闭文件
	fclose(pf);
	pf = NULL;//设置成空指针使其再也找不到这块空间
	return 0;
}

在这里插入图片描述
大家看fgetc就把文件里面的所有字符都读取出来了
现在呢我们写一行数据,这个时候就要用到fputs函数
fputs函数
在这里插入图片描述
const char * str, FILE * stream
Write string to stream这里的意思是将字符串写到流(也就是文件)里面去

在这里插入图片描述
大家看,大家可能就有疑问了,我们刚才不是写了26个英文字母吗,为什么这里的26个字母不见了呢?这是因为你再次向文件里面写数据的时候,会自动将你原来文件里面写的东西全部清空然后重新写,希望大家能够理解

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//#include<stdlib.h>
#include<errno.h>
#include<string.h>
int main()
{
    
    
	FILE* pf = fopen("test.txt", "w");//"w"改成"a"的时候是追加的意思。我们来看下面的图片
	if (pf == NULL)
	{
    
    
		printf("%s\n", strerror(errno));
		return 1;
	}
	fputs("hello bit", pf);
	//int ch = 0;
	//while ((ch = fgetc(pf)) != EOF)
	//{
    
    
	//	printf("%c ", ch);
	//}
	//char i = 0;
	//for (i = 'a'; i <= 'z'; i++)
	//{
    
    
	//	fputc(i, pf);
	//}
	//写文件
	//......
	//关闭文件
	fclose(pf);
	pf = NULL;//设置成空指针使其再也找不到这块空间
	return 0;
}

FILE pf = fopen(“test.txt”, “w”);//"w"改成"a"的时候是追加的意思。我们来看下面的图片*
在这里插入图片描述
现在我们要随机读一行数据应该怎么办呢,所以我们引入fgets函数
fgets函数
在这里插入图片描述
在这里插入图片描述
读到的字符串将会拷贝到str指向的空间的位置
最多的字符的个数将会被拷贝到str里面

在这里插入图片描述
大家可以尝试着自己理解一下

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//#include<stdlib.h>
#include<errno.h>
#include<string.h>
int main()
{
    
    
	FILE* pf = fopen("test.txt", "r");
	if (pf == NULL)
	{
    
    
		printf("%s\n", strerror(errno));
		return 1;
	}
	char arr[20];
	fgets(arr, 5, pf);
	printf("%s\n", arr);//放5的时候最多能够读到4个
	fclose(pf);
	pf = NULL;//设置成空指针使其再也找不到这块空间
	return 0;
}

在这里插入图片描述
在这里插入图片描述
这里给大家介绍一下perror这个函数,用起来更方便一些
perror函数

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//#include<stdlib.h>
#include<errno.h>
#include<string.h>
int main()
{
    
    
	FILE* pf = fopen("test", "r");
	if (pf == NULL)
	{
    
    
		//printf("%s\n", strerror(errno));
		perror("fopen");
		return 1;
	}
	char arr[20];
	fgets(arr, 5, pf);
	printf("%s\n", arr);//放5的时候最多能够读到4个
	fclose(pf);
	pf = NULL;//设置成空指针使其再也找不到这块空间
	return 0;
}

/这里给大家介绍一下fprintf函数
fprintf函数
在这里插入图片描述
在这里插入图片描述
将代码给大家

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//#include<stdlib.h>
#include<errno.h>
#include<string.h>
struct S
{
    
    
	char arr[20];
	int age;
	float score;
};
int main()
{
    
    
	struct S s = {
    
     "zhangsan",25,50.5f };
	FILE* pf = fopen("test.txt", "w");
	if (pf == NULL)
	{
    
    
		//printf("%s\n", strerror(errno));
		perror("fopen");
		return 1;
	}
	fprintf(pf, "%s %d %f", s.arr, s.age, s.score);//fprintf将数据写到文件里面去
	fclose(pf);
	pf = NULL;//设置成空指针使其再也找不到这块空间
	return 0;
}

如果想要把数据从文件中读出来,这里就必须引入fscanf函数
fscanf函数
在这里插入图片描述
在这里插入图片描述

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//#include<stdlib.h>
#include<errno.h>
#include<string.h>
struct S
{
    
    
	char arr[20];
	int age;
	float score;
};
int main()
{
    
    
	struct S s = {
    
     "zhangsan",25,50.5f };
	FILE* pf = fopen("test.txt", "w");
	if (pf == NULL)
	{
    
    
		//printf("%s\n", strerror(errno));
		perror("fopen");
		return 1;
	}
	fscanf(pf, "%s %d %f", s.arr, (&s.age), &(s.score));//fscanf从文件里面去读,将信息从pf指向的文件读出来放到s里面去,再将其打印出来
	printf("%s %d %f", s.arr, s.age, s.score);
	fclose(pf);
	pf = NULL;//设置成空指针使其再也找不到这块空间
	return 0;
}

fwrite函数的介绍
fwrite函数
在这里插入图片描述
在这里插入图片描述
这个时候你发现你有一些东西是看不懂的,这是因为这是以二进制的形式写进去的
我们以二进制的形式写进去那么就可以以二进制的形式读出来,这时候就要引入fread函数
fread函数
在这里插入图片描述
我们以二进制的形式写进去,我们就可以已二进制的形式读出来
在这里插入图片描述

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//#include<stdlib.h>
#include<errno.h>
#include<string.h>
struct S
{
    
    
	char arr[20];
	int age;
	float score;
};
int main()
{
    
    
	struct S s = {
    
     "zhangsan",25,50.5f };
	FILE* pf = fopen("test.txt", "wb");
	if (pf == NULL)
	{
    
    
		perror("fopen");
		return 1;
	}
	//fwrite(&s, sizeof(struct S), 1, pf);
	fread(&s, sizeof(struct S), 1, pf);
	printf("%s %d %f\n", s.arr, s.age, s.score);
	fclose(pf);
	pf = NULL;//设置成空指针使其再也找不到这块空间
	return 0;
}

本章终!

猜你喜欢

转载自blog.csdn.net/fjj2397194209/article/details/131313358