太原网站建设 网站制作,网站建设自查情况报告,六安城市网地址,安徽网站建设推广#x1f331;博客主页#xff1a;大寄一场. #x1f331;系列专栏#xff1a;C语言学习笔记 #x1f618;博客制作不易欢迎各位#x1f44d;点赞⭐收藏➕关注 目录
前言
C语言中的文件打开和关闭
文件指针
文件的打开和关闭
fclose
文件的顺序读写
fseek
ftell … 博客主页大寄一场. 系列专栏C语言学习笔记 博客制作不易欢迎各位点赞⭐收藏➕关注 目录
前言
C语言中的文件打开和关闭
文件指针
文件的打开和关闭
fclose
文件的顺序读写
fseek
ftell
rewind
文本文件和二进制文件
文件读取结束的判定
被错误使用的feof
文件缓冲
总结 前言 我们或许都有这样的苦恼在我们使用C语言进行编程的时候当我们程序写好跑起来之后我们输入的数据总是在关闭之后就丢失有些东西比如我们的通讯录实现想要将这些数据保存下次打开还在我们应该怎么做这里就让我带领大家进入文件这个奇妙的空间。
文件是什么 磁盘上的文件是文件。 但是在程序设计中我们一般谈的文件有两种程序文件、数据文件从文件功能的角度来分类的 程序文件 我们在编译器里面创建的文件比如后缀为.c的源程序文件在我们windows环境当中后缀为.obj的目标文件还有我们后缀为.exe的可执行程序这些文件一般是在我们程序设计时候所产生。 数据文件 对于文件来说里面的东西不是必须要为程序的我们在程序的设计过程中会读写数据这些数据的来源就是这些数据文件。 文件名 文件和我们一样都有一个独一味二的名字它们的名字构成不和我们一样姓名它是由我们的文件路径文件名主干文件后缀那我们知道文件后缀是什么也知道当时文件命名时候命名的主干是什么那这个文件路径是什么呢文件路径顾名思义是文件走过的路径这样想就大漏特漏文件路径指的是我们去找这个文件所途经的文件比如我现在要在我的电脑中找到我昨天写的代码我知道我的代码放在d盘一个集中的文件当中那我就可以去找一下d:\code\test-c C语言中的文件打开和关闭
文件指针
在我们探讨在C语言中怎么打开和关闭文件之前我们要了解一个概念叫文件指针
缓冲文件系统中关键的概念是“文件类型指针”简称“文件指针”。 每个被使用的文件都在内存中开辟了一个相应的文件信息区用来存放文件的相关信息如文件的名 字文件状态及文件当前的位置等。这些信息是保存在一个结构体变量中的。该结构体类型是有系统 声明的取名FILE
struct _iobuf {char *_ptr;int _cnt;char *_base;int _flag;int _file;int _charbuf;int _bufsiz;char *_tmpfname;};
typedef struct _iobuf FILE;
不同编译器下的结构体内部可能存在差异但是是不影响我们使用的每要打开一个文件FILE内部会自己判断应该是什么类型不需要使用者去担心这些细节我们在使用FILE的时候通常情况下是用一个指针去维护的我们这里可以试着去创建一个FILE*的变量。
FILE* pf; //文件指针类型 定义pf是一个指向FILE类型数据的指针变量。可以使pf指向某个文件的文件信息区是一个结构体变 量。通过该文件信息区中的信息就能够访问该文件。也就是说通过文件指针变量能够找到与它关联的文件。
比如 文件的打开和关闭
文件在读写之前应该先打开文件在使用结束之后应该关闭文件。 在编写程序的时候在打开文件的同时都会返回一个FILE*的指针变量指向该文件也相当于建立了指 针和文件的关系
ANSIC 规定使用fopen函数来打开文件fclose来关闭文件fopen
fopen是我们用来打开文件的函数它的第一个参数就是我们的文件名第二个参数是打开方式打开方式有很多。如下
文件使用方式含义如果文件不存在“r”只读为了输入数据打开一个已经存在的文本文件报错“w”只写为了输出数据打开一个文本文件建立一个新的文件“a”追加向文本文件尾添加数据建立一个新的文件“rb”只读为了输入数据打开一个二进制文件出错“wb”只写为了输出数据打开一个二进制文件建立一个新的文件“ab”追加向一个二进制文件尾添加数据出错“r”读写为了读和写打开一个文本文件出错“w”读写为了读和写建议一个新的文件建立一个新的文件“a”读写打开一个文件在文件尾进行读写建立一个新的文件“rb”读写为了读和写打开一个二进制文件出错“wb”读写为了读和写新建一个新的二进制文件建立一个新的文件“ab”读写打开一个二进制文件在文件尾进行读和写建立一个新的文件我们知道这些打开方式之后就可以试着打开文件了这里我们试一下用只读的方式打开文件。
#includestdio.hint main()
{FILE* pf;pf fopen(test.txt, r);if (pf NULL){perror(pf);return 1;}//操作文件//return 0;
}
fclose 我们的文件和动态内存一样我们打开用完之后是需要关闭的那用于关闭文件的函数就是我们的fclose它的使用和我们动态内存的free基本一样那我们优化一下上面的代码。
#includestdio.hint main()
{//打开文件FILE* pf;pf fopen(test.txt, r);//判断文件打开是否成功if (pf NULL){perror(pf);return 1;}//操作文件////关闭文件fclose(pf);pf NULL;return 0;
}
文件的顺序读写 我们文件打开之后要对文件进行操作这里就要用到我们的文件读写了在C语言中提供了很多用于读写的函数这里给大家列出一个表格。
功能函数名适用于字符输入函数fgetc所有输入流字符输出函数fputc所有输出流文本行输入函数fgets所有输入流文本行输出函数fputs所有输出流格式化输入函数fscanf所有输入流格式化输出函数fprintf所有输出流二进制输入fread文件二进制输出fwrite文件对于上述的这些函数而言所有输入/输出流这些函数都是文本信息我们写入到文本当中是可以看懂的最后两个二进制输入函数它输入到文本当中的是ASCII码我们不能直观的知道我们存放在内存中的数据是什么。
文件的随机读写 我们学习了文件的顺序读写那如果我们读写了文件内的第一个字符我们还想读取第一个怎么办如果是顺序读写时做不到的那这里就有了我们的随机读写。
fseek int fseek ( FILE * stream, long int offset, int origin ); 根据文件指针的位置和偏移量来定位文件指针它第一个参数放的是我们的文件指针第二个是要便宜多少第三个就是我们从哪里开始算偏移位置第三个参数在我们C语言中是由提供的。 ftell long int ftell ( FILE * stream ); ftell它可以计算我们文件指针相比较起始位置的偏移量然后返回这个值。
rewind void rewind ( FILE * stream ) fewind它可以将我们的文件指针直接回到文件的初始位置。 文本文件和二进制文件 根据数据的组织形式数据文件被称为文本文件或者二进制文件。 数据在内存中以二进制的形式存储如果不加转换的输出到外存就是二进制文件。 如果要求在外存上以ASCII码的形式存储则需要在存储前转换。以ASCII字符的形式存储的文件就是文本文件。 一个数据在内存中是怎么存储的呢 字符一律以ASCII形式存储数值型数据既可以用ASCII形式存储也可以使用二进制形式存储。 如有整数10000如果以ASCII码的形式输出到磁盘则磁盘中占用5个字节每个字符一个字节而二进制形式输出则在磁盘上只占4个字节VS2013测试 文件读取结束的判定
被错误使用的feof
牢记在文件读取过程中不能用feof函数的返回值直接用来判断文件的是否结束。 而是应用于当文件读取结束的时候判断是读取失败结束还是遇到文件尾结束。 1. 文本文件读取是否结束判断返回值是否为 EOF fgetc 或者 NULL fgets 例如 fgetc 判断是否为 EOF . fgets 判断返回值是否为 NULL . 2. 二进制文件的读取结束判断判断返回值是否小于实际要读的个数。 例如 fread判断返回值是否小于实际要读的个数
文件缓冲
ANSIC 标准采用“缓冲文件系统”处理的数据文件的所谓缓冲文件系统是指系统自动地在内存中为程序中每一个正在使用的文件开辟一块“文件缓冲区”。从内存向磁盘输出数据会先送到内存中的缓冲区装满缓冲区后才一起送到磁盘上。如果从磁盘向计算机读入数据则从磁盘文件中读取数据输入到内存缓冲区充满缓冲区然后再从缓冲区逐个地将数据送到程序数据区程序变量等。缓冲区的大小根据C编译系统决定的。
总结 文件操作对于我们来说可以让一些我们需要保存的数据放在文件当中下次使用的时候可以直接写入到程序当中。 那么这篇博客就到此为止了希望佬们多多支持