0
点赞
收藏
分享

微信扫一扫

【C语言】文件操作<1>

独孤凌雪 2022-02-20 阅读 54

目录

1.为什么使用文件

2.什么是文件

2.1 程序文件

2.2 数据文件

2.3 二者的关系

 2.4 文件名

3.文件的打开和关闭

3.1文件指针

3.2 文件的打开与关闭

 4.文件的顺序读写

只写模式

单个字符输出(fputc)

 整行的输出(fputs)

只读模式

拷贝文件


📢1.为什么使用文件

📢2.什么是文件

储存在磁盘中的文件就是文件
在程序设计中,根据文件的功能,常说的文件包括程序文件和数据文件

📢2.1 程序文件

📢2.2 数据文件

📢2.3 二者的关系

📢 2.4 文件名

📢3.文件的打开和关闭

📢3.1文件指针

📢3.2 文件的打开与关闭

                          fopen
头文件               #include <stdio.h>
格式                    FILE *fopen(const char *filename,const char *mode)
                             r  以只读模式打开一个已存在的文本文件,如果文件不存在,会出错。
                            w  以只写模式生成文本文件,若文件存在则文件长度清为Q②.
                            a  以追加模式,也就是从文件末尾处开始的只写模式,打开或生成文本文件。
打开方式              rb 以只读模式打开二进制文件。
                            wb以只写模式生成二进制文件,若文件存在则文件长度清为0.
                            ab 以追加模式,也就是从文件末尾处开始的只写模式,打开或生成二进制文件。
                            r+ 以更新(读写)模式打开文本文件。
                            w+以更新模式生成文本文件,若文件存在则文件长度清为0.
                            a+以追加模式,也就是从文件末尾处开始写入的更新模式,打开或生成文本文件。
返回值                 返回一个指向对象的指针,该对象用于控制已打开的流。若打开操作失败,则返回空指针

 📢这里的“流”,是一个宏观概念,通过连接键盘,显示器等周边机器形成的 “字符流通的管道”

                            fclose
头文件               #include <stdio.h>
格式                    int fclose(FILE *stream);
功能                    刷新stream指向的流,关闭与该流相连的文件。流中只进行了缓冲操作,还未被写入的数据                             会被传递到主机环境,由主机环境把这些数据写入文件中,而缓冲区里面尚未被读取的数据                             会被丢弃。然后把该流与文件分离,如果存在系统自动分配的与该流相连接的缓冲区,则会                             释放该缓冲区。
返回值                 成功关闭流时返回0,检测出错误时则返回EOF
//以只读模式访问文件
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<errno.h>
int main()
{
	//打开文件
	FILE* fp = fopen("text.txt","r");
	//判断是否成功打开
	if (fp == NULL)
	{
		printf("%s\n", strerror(errno));//打印出错误原因
		return 0;
	}
	//关闭文件
	fclose(fp);
	fp = NULL;
	return 0;
}

不存在text文件时

 

📢 4.文件的顺序读写

📢只写模式

📢单个字符输出(fputc)

                          fputc
头文件              #include <stdio.h>
格式                  int fputc(int C, FILE *stream);
功能                  将c指定的字符转换成unsigned char 型并写入 stream 指向的输出流                                  
返回值               返回写入的字符,若发生写入错误,则对流设置错误指示符并返回 EOF
 //从内存中输出到文件流中
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<errno.h>
int main()
{
	//打开文件
	FILE* fp = fopen("text.txt","w");
	//判断是否成功打开
	if (fp == NULL)
	{
		printf("%s\n", strerror(errno));
		return 0;
	}
	//写文件,从内存中输出到文件中
    int i = 0;
	for (i = 'a'; i <= 'z'; i++)
	{
		fputc(i,fp);
	}
	//关闭文件
	fclose(fp);
	fp = NULL;
	return 0;
}

 程序运行后:

 

 

📢 整行的输出(fputs)

                          fputs
头文件              #include <stdio.h>
格式                  int fputs(const char *s, FILE *stream);
功能                  把参数s指向的字符串写入stream指向的流,但不包括字符串末尾的空字符                              
返回值               若发生写入错误则返回EOF,否则返回非负值
 #define _CRT_SECURE_NO_WARNINGS 1
 #include<stdio.h>
 #include<errno.h>
 int main()
 {
	 //打开文件
	 FILE* fp = fopen("text.txt","w");
	 //判断是否成功打开
	 if (fp == NULL)
	 {
	 	printf("%s\n", strerror(errno));
	 	return 0;
	 }
	 fputs("abcdef",fp );
	 //关闭文件
	 fclose(fp);
	 fp = NULL;
	 return 0;
 }

📢只读模式

📢单个字符的输入 (fgetc)

                          fgetc
头文件              #include <stdio.h>
格式                  int fgetc(FILE *stream);
功能                  从stream指向的输入流中读取 unsigned char 型的下一个字符的值                         
返回值               返回EOF.发生读取错误时,则对该流设置错误指示符并返回 EOF
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<errno.h>
int main()
{
	//打开文件
	FILE* fp = fopen("text.txt", "r");
	//判断是否成功打开
	if (fp == NULL)
	{
		printf("%s\n", strerror(errno));
		return 0;
	}
	//读文件
	int ch;
	while ((ch=fgetc(fp))!=EOF)
	{
		printf("%c ", ch);
	}
	//关闭文件
	fclose(fp);
	fp = NULL;
	return 0;
}

📢整行的输入(fgets)

                          fgets
头文件              #include <stdio.h>
格式                  char *  fgets(char * s, int n,FILE *stream);
功能                  从stream指向的输入流中读取 unsigned char 型的字符串                       
返回值               函数获取字符串放入数组a,返回该数组的指针(首地址)如果读完,则返回空指针NULL
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<errno.h>
int main()
{
	//打开文件
	FILE* fp = fopen("text.txt", "r");
	//判断是否成功打开
	if (fp == NULL)
	{
		printf("%s\n", strerror(errno));
		return 0;
	}
	//读文件
	char ch[3];
	fgets(ch,3,fp);
		printf("%s", ch);
	//关闭文件
	fclose(fp);
	fp = NULL;
	return 0;
}

📢这里的fgets的第二个参数就是决定读取多少个字符,读取的字符数就是对应的数字减一; 

📢拷贝文件

#include<stdio.h>
#include<errno.h>
int main()//拷贝文件
{
	FILE* pr = fopen("text.txt", "r");
	if (pr == NULL)
	{
		printf("open for read:%s\n", strerror(errno));
		return 0;
	}
	FILE* pw = fopen("text2.txt","w");
	if (pr == NULL)
	{
		printf("open for write:%s\n", strerror(errno));
		close(pr);
		pr = NULL;
		return 0;
	}
	int ch=0;
	//拷贝文件
	while ((ch=fgetc(pr)) != EOF)
	{
		fputc(ch, pw);
	}
	//关闭文件
	fclose(pr);
	pr == NULL;
	fclose(pw);
	pw == NULL;
	return 0;
}

📢此时拷贝的text2与text完全相同 

欢迎点赞收藏加关注,如若有问题可以提出来😁😁😁😁 

举报

相关推荐

0 条评论