网站正在备案,网站建设价格规范,网页制作的常用开发工具是什么,做一个企业网站多少钱一 . 文本文件和二进制文件
根据数据的组织形式#xff0c;数据文件被分为了二进制文件和文本文件 数据在内存中是以二进制的形式存储#xff0c;如果不加转换的输出到外存的文件中#xff0c;就是二进制文件。 如果要求在外存上以ASCII 码的形式存储#xff0c;则需要再存…一 . 文本文件和二进制文件
根据数据的组织形式数据文件被分为了二进制文件和文本文件 数据在内存中是以二进制的形式存储如果不加转换的输出到外存的文件中就是二进制文件。 如果要求在外存上以ASCII 码的形式存储则需要再存储前转换以ASCII码的形式存储的文件就是文本文件
简单来说二进制文件就是我们看不懂的文件而文本文件是直接可以看懂的文件
⼀个数据在文件中是怎么存储的呢 字符⼀律以ASCII形式存储数值型数据既可以用ASCII形式存储也可以使用二进制形式存储。 如有整数10000如果以ASCII码的形式输出到磁盘则磁盘中占用5个字节每个字符⼀个字节 以⼆进制形式输出则在磁盘上只占4个字节。
代码示例; 可以看到以二进制方式打开的时候我们是看不懂里面的内容的。
二. 文件的打开和关闭
1. 流和标准流
(1)流
我们程序的数据需要输出到各种外部设备也需要从外部设备获取数据不同的外部设备的输⼊输出操作各不相同为了方便程序员对各种设备进行方便的操作我们抽象出了流的概念我们可以把流想象成流淌着字符的河。 C程序针对文件、画面、键盘等的数据输⼊输出操作都是通过流操作的。 ⼀般情况下我们要想向流里写数据或者从流中读取数据都是要打开流然后操作。
(2) 标准流
那为什么我们从键盘输⼊数据向屏幕上输出数据并没有打开流呢 那是因为C语言程序在启动的时候默认打开了3个流 • stdin–标准输⼊流在⼤多数的环境中从键盘输入scanf函数就是从标准输⼊流中读取数据。 • stdout–标准输出流大多数的环境中输出至显示器界面printf函数就是将信息输出到标准输出流中。 • stderr—标准错误流大多数环境中输出到显示器界面。 这是默认打开了这三个流我们使用scanf、printf等函数就可以直接进行输入输出操作的。 stdin、stdout、stderr三个流的类型是 FILE * 通常称为文件指针。 C语言中就是通过 FILE* 的文件指针来维护流的各种操作的。
2. 文件指针 对于文件的操作我们都是通过文件指针来实现的。
(1) 文件指针的形式 3. 文件的打开和关闭
文件在读写之前应该先打开文件在使用结束之后应该关闭文件。 在编写程序的时候在打开文件的同时都会返回⼀个FILE*的指针变量指向该⽂件也相当于建立了指针和文件的关系。 ANSIC规定使用 fopen 函数来打开文件 fclose 来关闭文件。 其中的mode表示打开方式
代码示例:
1以读的方式打开 因为这里我们的源文件底下并没有创建这个文件所以这里显示打开失败。
当我们创建好之后再打开就没问题了 2以写的方式打开 在以写的方式打开之前我们把之前的文件删除了但是这里还是成功打开了 可以看到这里还把要写的内容写到了文件里面。
这是因为以写的方式和以读的方式打开文件的区别;
当你以读的方式打开文件时如果没有这个文件就会打开失败当你以写的方式打开文件时即使没有这个文件它也会自己创建一个文件然后打开如果一旦打开失败的话就会返回空指针NULL
3按照路径打开文件 这里要注意一个细节
三. 文件的顺序读写 1. fgetc和fputc函数
(1) fgetc函数介绍 可以看到该函数的返回值为int类型的所以在读取到内容时就需要一个int类型的变量来接收
首先我们创建一个文件并往里面放一些内容 为了得到文件中的所有内容所以这里我们利用了一个while循环因为fgetc的停止条件是遇到错误所以这里循环的条件就是fgetc得到的返回值 EOF这样就读取到了所有的字符
(2) fputc 函数介绍 通过该函数的介绍我们可以发现这个函数的返回值的类型也为int类型这就和fgetc对应上了。 stdin -- 标准输入 stdout -- 标准输出
2. fgetcs 和fputs函数介绍
1fputs函数介绍 通过该函数的介绍我们可以看到这个函数的返回值为int类型包含两个参数第一个就是字符串的地址一个是流的地址也就是文件指针。 这里需要注意的是如果在写入两个字符串时如果不自己加上换行符的话第二个字符串就会追加在第一个字符串后面 并且如果第二次打开相同的文件再写入的话它是会删除掉原文件中的内容然后再重新写入的
2fgets函数介绍 通过这个函数的介绍可以看到这个函数的返回值的类型为char*包含三个参数第一个参数就是char*的一个指针这个参数代表着我们把读取到的内容存放到的那个地址第二个参数是int类型的代表着读取的个数第三个参数就代表着从哪读取也就是文件指针。 这里要注意的是虽然这里我们是读取5个但其实第五个就是\0这也算读取结束的一个标志吧 并且这里需要注意的是在读取的时候一次只能读取一行 如果要读取两行内容就需要读取两次
如果不信的话可以通过调试来看一下 可以看到第五个读取的确实就是\0
3. fscnaf 和 fprintf 函数
1 fprintf 函数介绍 通过该函数的介绍其实不难发现这个函数相对较于printf函数就差了一个文件指针 会写printf函数就会写这个就把它当做printf来写最后再加上一个文件指针就行
(2) fscanf 函数介绍 通过该函数的介绍可以发现这个函数和scanf函数也是只差了一个参数也就是文件指针。
既然我们会写scanf函数那么我们也就会写这个函数了;
4. fread 和fwrite函数
1fwrite 函数介绍 通过该函数的介绍我们发现这个函数返回值为一个正整数包含四个参数第一个参数就是一个void*的指针代表了要写入的数据的原地址第二个参数代表了每个数据的大小第三个参数就是数据的个数第四个参数就是文件指针 可以看到这个时候已经以二进制的形式写入了但是我们是看不懂的。 并且需要注意的是因为是二进制的读和写文件所以这里在打开文件的时候是wb
2fread 函数介绍 通过对该函数的介绍我们可以看到这个函数和fwrite函数的返回值和参数是一样的只是一点不同的是第一个参数就成了读取到的数据存放位置的地址了
5. scanf、printf 函数和 fscanf 、fprintf 函数的对比
** 前者是针对标准输入和输出的格式化输入和输出函数** ** 后者是针对所有输入流和输出流的格式化的输入和输出函数**
6. sscanf 和sprintf函数
1sprintf函数介绍 通过该函数的介绍可以看到该函数的返回值为int类型包含第一个参数是一个char*的指针也就是输出的数据存放的地址后面的写法就和printf函数的写发一样了
2sscanf函数介绍 通过该函数的介绍我们发现这个函数除了第一个参数和scanf函数不一样其他的都一样这里的第一个参数就是sprintf转化为的字符串的地址 可以看到sprintf把一些格式化的数据整合成了一个字符串的形式而sscanf将整合好的字符串分解成了格式化的数据
四. 文件的随机读写
1. fseek定位文件指针
1介绍 通过该函数的介绍我们可以看到该函数的返回值类型为int包含三个参数第一个参数就是文件指针第二个参数就是文件指针偏移的长度第三个参数就是偏移的参考点 参考点 起始位置 、当前位置、末尾位置
2举例 这里需要注意的一个点就是每读取完一个数据之后文件指针就会往后走一个单位长度这是容易忽略的一个点其他的没啥好说的
2. ftell函数
1介绍 通过该函数的介绍我们可以知道该函数可以返回文件指针相对于起始位置的偏移量这个和之前在学内存对齐时的求各成员相对于起始位置时用到的offsetof很像
(2) 例子 3. rewind函数
1介绍 通过该函数的介绍我们可以看到该函数可以让文件指针回到起始位置
2例子 五. 文件结束的判定 六. 文件缓冲区
ANSIC标准采用“缓冲文件系统”处理数据文件的所谓缓冲文件系统是指系统自动地在内存中为程序中每⼀个正在使用的文件开辟⼀块“文件缓冲区”。从内存向磁盘输出数据会先送到内存中的缓冲区装满缓冲区后才⼀起送到磁盘上。如果从磁盘向计算机读入数据则从磁盘文件中读取数据输入到内存缓冲区充满缓冲区然后再从缓冲区逐个地将数据送到程序数据区程序变量等。缓冲区的大小根据C编译系统决定的。 这里可以得出⼀个结论 因为有缓冲区的存在C语言在操作文件的时候需要做刷新缓冲区或者在文件操作结束的时候关闭文件。 如果不做可能导致读写文件的问题。
完结撒花❀❀❀