磁盘中的文件是文件,键盘是文件,显示器也是文件,所以有一句话叫做一切皆文件。
但是从程序设计角度来说,文件一般有两种,程序文件和数据文件;
程序文件:包含源程序文件(.c后缀),目标文件(windows环境后缀.obj),可执行文件(windows环境.exe);
数据文件:程序运行时读取或输出的数据;
接下来谈的主要是数据文件;
程序运行时数据都是保存在内存之中,当退出程序这些数据就会消失;比如通讯录小程序,我们输入了联系人信息,一旦退出又要重新输入数据,这样的通讯录就没有了意义。而当我们退出程序将数据保存在磁盘文件之中,运行程序时再将数据读取出来,这样就将信息做到了持久化保存;
我们使用一个文件必须知道这个文件的名字,一个文件名通常包含3个部分:文件路径+文件名主干+文件后缀;
比如:e\project\file.log
文件路径:e盘之中的project 文件名主干:file 文件名后缀:log
要使用文件,首先我们要将一个文件打开,文件打开的函数是:FILE * fopen ( const char * filename, const char * mode );;
形参列表之中:filename表示的是打开文件的名字,mode表示的是打开的方式是读取还是写入。返回值是一个文件指针,下面来演示一下:
上面进行了初步的演示,接下来我将继续介绍文件指针,文件的读写方式;
上面打开文件演示中的FILE *fp即定义的文件指针变量,用来接收文件信息区的地址,通过这个指针变量就可以访问到与文件信息对应的文件;
文件使用方式 | 含义 |
---|---|
“r” | 为输入打开一个文本文件 |
“w” | 为输出打开一个文本文件 |
“a” | 向文本文件尾增加数据 |
“rb” | 为输入打开一个二进制文件 |
“wb” | 为输出打开一个二进制文件 |
“ab” | 向二进制文件尾增加数据 |
“r+” | 为读/写打开一个文本文件 |
“w+” | 为读/写建立一个新的文本文件 |
“a+” | 打开一个文件在文件尾进行续写 |
“rb+” | 为读/写打开一个二进制文件 |
“wb+” | 为读/写建立一个新的二进制文件 |
“ab+” | 打开一个二进制文件,在文件尾进行读和写 |
上述表格看起来复杂,其实只要知道:
1.w对应的是文本文件的输出,是覆盖式写入,当打开的文件不存在时会创建一个文件。
下面动图展示了“w”方式的覆盖式写入
2.r对应的是文本文件的输入,当打开的文件不存在时会打开失败。
3.是对文本文件进行续写,是在文件末尾续写,当打开文件不存在时会打开失败。
经过验证,在vs2013,当打开文件不存在时也会自动创建一个新的文件;下面动图演示“a”在文件尾进行续写
4.b对应的是二进制文件,只要在上述四种方式后面加上b就是对应的二进制文件;
5.“+”表示的是读写一体,同样只要在上述方式后端添上“+”;
下面演示两个字符输入函数的使用;
7.1getc演示:
7.2fputc演示:
8.1 fseek:根据文件指针的位置和偏移量来定位文件指针
演示:
文本文件:对人友好,将文件内容转化为对应的ASCII码值对应的符号
二进制文件:直接将对应的补码储存到文件之中,即内存里面什么样,文件之中也是什么样
文件读取结束的判定
文本文件的判定:
在使用feof的使用必须让文件一直读取,读取到出错再用feof判断返回值是否为文件的结尾;
fgetc判断是否为EOF,fgets判断是否为NULL;
因为文件读取出错的时候也有可能返回EOF,即因为其他因素而导致结束读取,这时候就需要用feof来判定返回值EOF是否为读取结束;
演示:
二进制文件读取结束判定
二进制文件的读结束判定为:判定返回值是否小于实际要读的个数
因为当fread读取返回值一直等于要读取的个数(满足期望值)即会一直读取下去,当返回值小于期望值时就不会再读了;
成功演示
失败演示
先上理论:
c语言默认提供缓冲机制
常见缓冲机制有:无缓冲,行缓冲,全缓冲
普通文件写入采用全缓冲
显示器文件写入采用行缓冲
所谓的缓冲区本质就是一块内存,存在的最大价值就是为了提升程序的效率;
引申
因为缓冲区的存在,需要刷新缓冲区或者文件操作结束的时候关闭文件,否则可能导致文件读写问题
文章浏览阅读2.1k次。物联网的出现逐渐改变和影响着大家生活的各个方面,物联网是以互联网为基础为智能设备提供通信支撑。在万物互联的大背景下,物质因连接而被赋予生命,但是还有小部分企业对物联网的认识存在简单的概念上。 一、物联卡的应用场景和流量划分 物联卡的应用场景可以划分为三类,分别是小流量应用场景、中流量应用场景、大流量应用场景。 ①小流量应用场景是指单用户量小于10MB,应用场景特征指文本类信息传输、单次使用流量小或每月连接次数少,一次性预付较长费用。适用行业主要有智能抄表、金融POS机、消费电子设备等, ②_物联卡套餐
文章浏览阅读5.9k次,点赞11次,收藏52次。某些特殊的应用场合可能要求PCIe设备能够以高可靠性持续不间断运行,为此,PCIe总线采用热插拔(Hot Plug)和热切换(Hot Swap)技术,来实现不关闭系统电源的情况下更换PCIe卡设备。热切换和热插拔的主要区别是应用领域不同,热插拔主要应用于PC以及服务器的主板上的板卡连接,而热切换主要针对的是CPCI(CompactPCI ,一种常用于仪器仪表的接口)应用的。热插拔分为两种,一是通知式热插拔,一个是暴力热插拔,_pcie dpc presence detect
文章浏览阅读385次。#!/usr/bin/env python # -*- coding: utf-8 -*- import sys, os import subprocess import re import shlex import time filename = sys.argv[0] ABSDIR = os.path.abspath(os.path.dirnam_自动部署cmd脚本
文章浏览阅读9.2k次,点赞8次,收藏36次。参考:http://acsc.cs.utexas.edu/cpabe/tutorial.htmlhttp://acsc.cs.utexas.edu/cpabe/事先先配置好cp-abe:http://www.cnblogs.com/rockorange/p/3757805.html我在ubuntu的主文件夹下面的hmj文件夹下新建了一个文件cp-abe。路径是:/home/_基于随机森林的cpabe
文章浏览阅读1.5k次。chapter3:finite-state automation. 原书中第三版中的这一章还没写完,所以是看的图书馆借来的第二版,并结合宗成庆老师的统计自然语言处理来看的。 有限状态自动机 finite-state automation, FSA前面一章节中的正则表达式只是一种用于文本搜索的方便的元语言,它是描述有限状态机的一种方法。任何正则表达式又可以用有限状态机来实现(除..._实现自动机的代码, 并以羊的语言(/baa+!/)为例对其进行测试
文章浏览阅读5.8k次,点赞7次,收藏18次。一个大学C语言试题的简单实现,供参考。题目:员工信息管理程序主要用结构体数组实现,用结构体表示每项记录,数据为:员工编号、姓名、性别、年龄、工龄、职务、部门、住址。设计各个函数,分别实现以下功能:(1)录入:完成职工信息的输入;(2)删除:完成职工信息的删除;(3)修改:允许对已经录入的数据重新进行编辑、修改;(4)显示:显示所有职工的信息;(5)查询:a. 按姓名查找职工记录;b_char department[max_students][50]
文章浏览阅读1k次。window.onload = function() { searchRgba(); secondKill(); bannerAutoPlay();} //封装首页头部搜索栏在页面向下滚动时,背景颜色从透明,慢慢变深的效果,在超过轮播图时,背景透明度为0.85不变。 function searchRgba() { var topSearch = docu..._js标题滚动实现背景图片由透明变实色怎么弄
文章浏览阅读689次,点赞10次,收藏9次。利用Cesium自定义Primitive渲染多边形,并实现实时绘制多边形_cesium 画空间多边形
文章浏览阅读517次。MySQL数据库事务隔离级别有四种:READ-UNCOMMITTED(读未提交)、READ-COMMITTED(读提交)、REPEATABLE-READ(重复读)、SERIERLIZED(序列化读)。要真正理解数据库事务隔离级不能光看书,必须要上机操作,多练几次就会明白的了。上机环境有几点大家要注意的:1,把事务的自动提交功能关掉;2,把表引擎设置为InnoDB(支持事务操作);3,在做实验的_通俗的讲一下mysql的隔离级别
文章浏览阅读1.4k次。loop循环,计算2的8次方assume cs:codesgcodesg segment mov ax,2 mov cx,7 s: add ax,ax loop s mov ax,4c00h int 21Hcodesg endsend_16位汇编 循环
文章浏览阅读7.8k次,点赞7次,收藏69次。一 wxFormBuilder是什么wxFormBuilder是一款可视化的GUI设计工具,界面设计后可以自动生成代码,免去了手工码gui的繁琐,一套界面可支持生成C++\Python\PHP\Lua\XRC等代码形式,可以极大提升python GUI开发效能。项目发布网址:https://github.com/wxFormBuilder/wxFormBuilder/releases..._vscode wxformbuilder
文章浏览阅读268次。删除 mysqlsudo apt-get autoremove --purge mysql-server-5.0sudo apt-get remove mysql-serversudo apt-get autoremove mysql-serversudo apt-get remove mysql-common //这个很重要上面的其实有一些是多余的。清理残_sudo apt-get remove mysql-common