首页 > 其他分享 >C语言:文件操作

C语言:文件操作

时间:2024-03-29 15:31:20浏览次数:23  
标签:文件 字符 输出 C语言 pf FILE 操作 打开

1.什么是文件

磁盘(硬盘)上的文件是文件。但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件(从文件功能的角度来分类的)。

1.1  程序文件

程序文件包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行程(windows环境后缀为.exe)。

1.2数据文件

文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件,或者输出内容的文件。

2.文件的打开和关闭

2.1流和标准流
2.1.1流

我们程序的数据需要输出到各种外部设备,也需要从外部设备获取数据,不同的外部设备的输入输出操作各不相同,为了方便程序员对各种设备进行方便的操作,我们抽象出了流的概念,我们可以把流想象成流淌着字符的河。
C程序针对文件、画面、键盘等的数据输入输出操作都是通过流操作的。
⼀般情况下,我们要想向流里写数据,或者从流中读取数据,都是要打开流,然后操作。

2.1.2标准流

那为什么我们从键盘输入数据,向屏幕上输出数据,并没有打开流呢?


那是因为C语言程序在启动的时候,默认打开了3个流:
• stdin - 标准输入流,在大多数的环境中从键盘输入,scanf函数就是从标准输入流中读取数据。
• stdout - 标准输出流,大多数的环境中输出至显示器界面,printf函数就是将信息输出到标准输出
流中。
• stderr - 标准错误流,大多数环境中输出到显示器界面。
这是默认打开了这三个流,我们使用scanf、printf等函数就可以直接进行输入输出操作的。
stdin、stdout、stderr 三个流的类型是: FILE * ,通常称为文件指针。
C语言中,就是通过 FILE* 的文件指针来维护流的各种操作的。

2.2文件指针

 

FILE* pf;

该代码定义了一个指针变量pf,该指针变量指向FILE类型数据。可以使pf指向某个文件信息区,通过该文件信息区中的信息访问该文件,也就是说通过文件指针变量能够间接找到与它相关联的文件。

例如:

3.文件的打开和关闭 

 文件在读写之前应该先打开文件,在结束之后应该关闭文件。

在编写程序的时候,在打开文件的同时会返回一个FILE*的指针变量指向该文件,也相当于建立了指针和文件的关系。

ANSI  C规定使用 fopen函数 来打开文件,fclose函数 来关闭文件。

//打开文件
FILE* fopen(const char* filename, const char* mode);

//关闭文件
int  fclose(FILE * stream);
3.1  //fopen函数

 

3.2   //fclose函数

 

 

 

 代码1://以"r"模式打开

int main()
{
	//打开文件,以读的形式打开
	FILE* pf = fopen("test.txt", "r");
	//根据fopen函数返回值可知如果以"r"模式打开文件后文件的值为
	//空,说明该文件不存在,我们可以使用perror在屏幕上打印错误信
	// 息,并且提前返回
	if (pf == NULL)
	{
		perror(pf);
		return 1;
	}
	//读文件

	//关闭文件
	fclose(pf);
	pf = NULL;
	//文件关闭后应及时置为空
	return 0;
}

代码2://以"w"模式打开

int main()
{
	//打开文件,以写的形式打开
	FILE* pf = fopen("test.txt", "w");
	//如果以"w"模式打开文件后该文件不存在,我们会主动新建1个名为
	// "test.txt"的文件
	if (pf == NULL)
	{
		perror(pf);
		return 1;
	}
	//写文件

	//关闭文件
	fclose(pf);
	pf = NULL;
	//文件关闭后应及时置为空
	return 0;
}

4.文件的顺序读写

 

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

一个字符一个字符的读取

 

 

 

 

提醒:如果fgetc读取字符成功,返回的是该字符的ASCII码值 

如果读取文件结尾或者读取失败的时候,返回EOF(-1)。

 

代码1://fgetc的使用

test.txt文件

acbdhjm
int main()
{
	//打开文件
	FILE* pf = fopen("test.txt", "r");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	//写文件
	int ch = fgetc(pf);
	printf("%c\n", ch);

	ch = fgetc(pf);
	printf("%c\n", ch);

	//关闭文件
	fclose(pf);
	pf = NULL;

	return 0;
}

结果:

 讲解:一开始的时候鼠标指向第一个字符前面的位置,调用fgetc的时候就会读取到第一个字符a,此时鼠标就会移动到a的后面,c的前面,再次调用fgetc就会向后读取字符c,使用printf将c打印在屏幕上。

 

 

 假设我们将test.txt文件中的内容改为acb

结果如下:

 

此时鼠标指向第一个字符a的前面,向后读取一个字符a,在屏幕上打印字符a 

 

 此时鼠标指向第一个字符a的后面,向后读取一个字符c,在屏幕上打印字符c

 

 此时鼠标指向第二个字符c的后面,向后读取一个字符b,在屏幕上打印字符b

 

 此时鼠标指向第三个字符b的后面,此时鼠标已指向文件末尾,所以会返回EOF(-1)。

 

 

代码2:

//test.txt文件

abcdefghijklmnopqrstuvwxyz

 //将26个英语字母打印在屏幕上

int main()
{
	//打开文件
	FILE* pf = fopen("test.txt", "r");
	if (pf == NULL)
	{
		perror(pf);
		return 1;
	}

	//读文件
	//将26个英语字母打印
	int ch = 0;
	while ((ch = fgetc(pf)) != EOF)
	{
		printf("%c ", ch);
	}

	//关闭文件
	fclose(pf);
	pf = NULL;

	return 0;
}

 运行结果:

标签:文件,字符,输出,C语言,pf,FILE,操作,打开
From: https://blog.csdn.net/2302_80892233/article/details/137060384

相关文章

  • 你问我答!手把手教学,银河麒麟桌面操作系统编译安装BIMP插件过程详解
    (引言:银河麒麟应热心用户后台提问,推出银河麒麟桌面操作系统编译安装BIMP插件详解过程详解专题。如有其它问题和需求,欢迎后台留言咨询……)1.GIMP简介GIMP是GNU图像处理程序(GNUImageManipulationProgram)的缩写。包括几乎所有图象处理所需的功能,号称Linux下的PhotoS......
  • 如何在Java中读取超过内存大小的文件
    读取文件内容,然后进行处理,在Java中我们通常利用Files类中的方法,将可以文件内容加载到内存,并流顺利地进行处理。但是,在一些场景下,我们需要处理的文件可能比我们机器所拥有的内存要大。此时,我们则需要采用另一种策略:部分读取它,并具有其他结构来仅编译所需的数据。接下来,我们就来......
  • MIUI安卓录音机文件位置
    旧版:在“/storage/sdcard0/MIUI/sound_recorder/”里的相应文件夹里。新版:在“/手机存储/Android/data/com.android.soundrecorder/files”里的相应文件夹里。猴米自身的文件管理器无法打开,得使用安卓原生自带的文件管理器(可以通过猴米文件管理器调用)为遵循安卓规范与保护录......
  • git 忽略idea文件夹
    如果.gitignore文件不存在,在项目的根目录下创建一个名为.gitignore的文件,并在该文件中添加以下内容:.idea/如果.idea文件夹已经被跟踪,运行gitrm--cached.idea来从Git跟踪中移除它,然后再提交这个更改。gitrm-r--cached.ideagitcommit-m"xxxxx"gitpushoriginmast......
  • MySQL单表操作学习DDL_DML_DQL语句,以及模糊查询
    1.DDL语句CREATETABLE`student`(`id`int(11)NOTNULLAUTO_INCREMENTCOMMENT'学号',`creatDate`datetimeDEFAULTNULL,`userName`varchar(20)DEFAULTNULL,`pwd`varchar(36)DEFAULTNULL,`phone`varchar(11)DEFAULTNULL,`age`tinyi......
  • C语言运算符和表达式——增1和减1运算符
    目录增1和减1运算符一元运算符前缀增1/减1运算符后缀增1/减1运算符前缀与后缀对变量和表达式的影响稍微复杂一点的例子增1和减1运算符的优缺点增1和减1运算符增1运算符(Increment)++*使变量的值增加1个单位减1运算符(Decrement)--*使变量的值减少1个单位注意:操作数......
  • 26版SPSS操作教程(初级第十章)
    前言#由于导师最近布置了学习SPSS这款软件的任务,因此想来平台和大家一起交流下学习经验,这期推送内容接上一次第九章的学习笔记,希望能得到一些指正和帮助~粉丝及官方意见说明#针对官方爸爸的意见说的推送缺乏操作过程的数据案例文件澄清如下:1、操作演示的数据全部由我本人随......
  • 26版SPSS操作教程(初级第十一章)
    前言#由于导师最近布置了学习SPSS这款软件的任务,因此想来平台和大家一起交流下学习经验,这期推送内容接上一次第十章的学习笔记,希望能得到一些指正和帮助~粉丝及官方意见说明#针对官方爸爸的意见说的推送缺乏操作过程的数据案例文件澄清如下:1、操作演示的数据全部由我本人随......
  • python获取视频时长并移动到对应时长的文件夹下
    importosimportshutilfrommoviepy.editorimportVideoFileClip#获取所有文件defgetAllFiles(fire_dir):filepath_list=[]forroot,folder_names,file_namesinos.walk(fire_dir):forfile_nameinfile_names:file_path=root+os......
  • mac图形操作界面展示隐藏文件
    可以通过以下方法查看以.开头的隐藏文件:方法一:使用Finder的菜单栏打开Finder应用程序。点击菜单栏中的“显示”。选择“显示隐藏文件”。方法二:使用Finder的快捷键打开Finder应用程序。按住 Command 键和 Shift 键,然后点按句点(.)。......