当前位置: 首页 > 编程日记 > 正文

文件操作01 - 零基础入门学习C语言60

第十一章:文件操作01

让编程改变世界

Change the world by program


C文件概述

所谓“文件”是指一组相关数据的有序集合。这个数据集有一个名称,叫做文件名。实际上在前面的各章中我们已经多次使用了文件,例如源程序文件、目标文件、可执行文件、库文件 (头文件)等。 文件通常是驻留在外部介质(如磁盘等)上的,在使用时才调入内存中来。从不同的角度可对文件作不同的分类。从用户的角度看,文件可分为普通文件和设备文件两种。 操作系统是以文件为单位对数据进行管理的。 [caption id="attachment_202" align="aligncenter" width="300"] 操作系统是以文件为单位对数据进行管理的[/caption]

文件的分类

从用户观点:

特殊文件(标准输入输出文件或标准设备文件) 普通文件(磁盘文件)

从操作系统的角度看,每一个与主机相连的输入、输出设备看作是一个文件。

例: 输入文件:终端键盘 输出文件:显示屏和打印机

按数据的组织形式:

ASCII文件(文本文件):每一个字节放一个ASCII代码 二进制文件:把内存中的数据按其在内存中的存储形式原样输出到磁盘上存放。 例如整数10000D在内存中的存储形式以及分别按ASCII码形式和二进制形式输出如下图所示:

ASCII文件和二进制文件的比较

ASCII文件便于对字符进行逐个处理,也便于输出字符。但一般占存储空间较多,而且要花费转换时间。 二进制文件可以节省外存空间和转换时间,但一个字节并不对应一个字符,不能直接输出字符形式。 一般中间结果数据需要暂时保存在外存上,以后又需要输入内存的,常用二进制文件保存。

C语言对文件的处理方法

缓冲文件系统:系统自动地在内存区为每一个正在使用的文件开辟一个缓冲区。用缓冲文件系统进行的输入输出又称为高级磁盘输入输出。 非缓冲文件系统:系统不自动开辟确定大小的缓冲区,而由程序为每个文件设定缓冲区。用非缓冲文件系统进行的输入输出又称为低级输入输出系统。

课外知识

在UNIX系统下,用缓冲文件系统来处理文本文件,用非缓冲文件系统来处理二进制文件。 ANSI C 标准只采用缓冲文件系统来处理文本文件和二进制文件。 C语言中对文件的读写都是用库函数来实现。

文件的打开与关闭

文件型指针变量:

FILE *fp;

fp是一个指向FILE类型结构体的指针变量。 我们使fp指向某一个文件的结构体变量,从而通过该结构体变量中的文件信息能够访问该文件。 如果有n个文件,一般应设n个指针变量,使它们分别指向n个文件,以实现对文件的访问。   FILE类型的数组: FILE  f[5]; 定义了一个结构体数组f,它有5个元素,可以用来存放5个文件的信息。 一头雾水?不明白?接着看具体的使用就明白啦~

一.文件的打开(fopen函数)

函数调用:

FILE *fp;

fp = fopen(文件名,使用文件方式);

注意: 需要打开的文件名,也就是准备访问的文件的名字 使用文件的方式(“读”还是“写”等); 让哪一个指针变量指向被打开的文件。

文件使用方式

“r” (只读)                 为输入打开一个文本文件 “w” (只写)                为输出打开一个文本文件 “a” (追加)                 向文本文件尾增加数据 “rb” (只读)               为输入打开一个二进制文件 “wb” (只写)              为输出打开一个二进制文件 "ab“ (追加)                向二进制文件尾增加数据 "r+“ (读写)                为读/写打开一个文本文件 "w+” (读写)               为读/写建立一个新的文本文件 "a+” (读写)                为读/写打开一个文本文件 "rb+“ (读写)              为读/写打开一个二进制文件 “wb+“ (读写)           为读/写建立一个新的二进制文件 “ab+” (读写)             为读/写打开一个二进制文件

对于文件使用方式有以下几点说明

凡用“r”打开一个文件时,该文件必须已经存在,且只能从该文件读出。 用“w”打开的文件只能向该文件写入。若打开的文件不存在,则以指定的文件名建立该文件,若打开的文件已经存在,则将该文件删去,重建一个新文件。 若要向一个已存在的文件追加新的信息,只能用“a”方式打开文件。但此时该文件必须是存在的,否则将会出错。 在打开一个文件时,如果出错,fopen将返回一个空指针值NULL。 在程序中可以用这一信息来判别是否完成打开文件的工作,并作相应的处理。 把一个文本文件读入内存时,要将ASCII码转换成二进制码,而把文件以文本方式写入磁盘时,也要把二进制码转换成ASCII码,因此文本文件的读写要花费较多的转换时间。对二进制文件的读写不存在这种转换。 [buy] 获得所有教学视频、课件、源代码等资源打包 [/buy] [Downlink href='http://kuai.xunlei.com/d/LHJPNTDIXQJZ']视频下载[/Downlink]

转载于:https://www.cnblogs.com/LoveFishC/archive/2011/04/13/3846069.html

相关文章:

iPad mini时隔四年更新,搭载A12芯片,起售价2999

整理 | 非主流出品 | AI科技大本营(公众号id:rgznai100)距离苹果的春季发布还有一周,但就在昨天,苹果毫无征兆地给广大果粉来了一场预热。3 月 18 日下午,苹果官网进行更新,悄悄地推出了两款新品…

【Qt】通过QtCreator源码学习Qt(一):pro文件

1、学习目的 学习pro文件的语法规则,这在跨平台项目中会经常用到。和条件编译相似,在pro中可以根据平台选择不同的编译模块、文件,还可以向源码中传递变量等。 2、学习方法 通过学习QtCreator源码中的pro文件,来掌握pro文件语法规则,下面以qtcreator.pro文件为例,先看…

TCP和UDP相关记录

有关于计算机网络的知识,准确来说我也忘得差不多了,现在要开始找实习了。努力从新学一下,记录在这里以防丢失。 --------------------------------------------------------- 首先对于网络层次有很多种分法。大致有7层结构、5层结构、4层结构…

win2003服务器iis6.0环境下php5.3.2安装配置

IIS6PHP5.3.2配置: 在windows下使用ApachePHP的,请选择VC6版本; windows下使用IISPHP的,请选择VC9版本 首先要知道的是,那个服务器平台对应PHP那个版本: 1、在windows下使用ApachePHP的,请选择…

李飞飞宣布成立斯坦福“以人为本AI研究院”

本位首发于公众号极客公园(ID:GeekPark)作者 | 沈知涵、biu编辑 | 宋德胜AI 不是要取代我们,而是让我们做得更好。这一次,台上的李飞飞不是 Google Cloud 的首席科学家,也不是斯坦福人工实验室(…

【Qt】菜单栏、工具栏、状态栏、右键菜单的实现

在QMainWidget基础上实现菜单栏、工具栏、状态栏、右键菜单。 头文件: #ifndef GWDEMO_H #define GWDEMO_H#include <QMainWindow> #include <QMenu> #include

云计算公司Zuora提交IPO申请 预计募资1亿美元

2019独角兽企业重金招聘Python工程师标准>>> 总部位于硅谷的云计算公司 Zuora 周五向美国证券交易委员会&#xff08;SEC&#xff09;提交招股说明书&#xff0c;计划通过首次公开募股&#xff08;IPO&#xff09;募集 1 亿美元资金。 Zuora 已发布针对云计算提供商…

浅谈“闭包”,什么才是“闭包”思想!—— javascript

先看一个简单小案例&#xff1a;<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML> <HEAD> <TITLE> New Document </TITLE> <META NAME"Generator" CONTENT""> <META NAME"…

Debug神经网络的五项基本原则

整理 | 琥珀出品 | AI科技大本营&#xff08;公众号id&#xff1a;rgznai100&#xff09;很多情况下&#xff0c;研究人员会遇到一个问题&#xff1a;使用机器学习框架实现的神经网络可能与理论模型相去甚远。验证这款模型是否可靠&#xff0c;直接方式就是不断修正和调参。例如…

iOS获取手机型号

2019独角兽企业重金招聘Python工程师标准>>> //不同iPhone设备屏幕比例 iPhone5&#xff0c;4寸&#xff0c;比例16&#xff1a;9 iPhone5c&#xff0c;4寸&#xff0c;比例16&#xff1a;9 iPhone5s&#xff0c;4寸&#xff0c;比例16&#xff1a;9 iPhone6&#x…

【Qt】通过QtCreator源码学习Qt(二):跨平台编程

1、Qt对当前平台的判断 在qsystemdetection.h中根据宏定义来判断当前的操作系统,常用的操作系统如下: Q_OS_WIN、Q_OS_LINUX、Q_OS_MAC、Q_OS_UNIX qsystemdetection.h源码如下 #ifndef QGLOBAL_H # include <QtCore/qglobal.h> #endif#ifndef QSYSTEMDETECTION_H

能说明你的Javascript技术很烂的五个原因

Javascript 在互联网上名声很臭&#xff0c;但你又很难再找到一个像它这样如此动态、如此被广泛使用、如此根植于我们的生活中的另外一种语言。它的低学习门槛让很多人都称它为学 前脚本语言&#xff0c;它另外一个让人嘲笑的东西是动态语言的概念是偏偏使用了高标准的静态数据…

FPGA在人工智能时代的独特优势

来源 | 老石谈芯作者 | 老石&#xff0c;博士毕业于伦敦帝国理工大学电子工程系&#xff0c;现任某知名半导体公司高级FPGA研发工程师&#xff0c;深耕于FPGA的数据中心网络加速、网络功能虚拟化、高速有线网络通信等领域的研发和创新工作。曾经针对FPGA、高性能与可重构计算等…

【Qt】通过QtCreator源码学习Qt(三):linux平台的信号、程序崩溃处理

崩溃处理设置:CrashHandlerSetup 1、原理 在堆中为信号处理函数分配一块区域,作为该函数的栈使用,当系统默认的栈空间用尽时,调用信号处理函数使用的栈是在堆中分配的空间,而不是系统默认的栈中,所以它仍旧可以继续工作,执行崩溃处理程序。 崩溃处理使用的LSM(Linux…

WebGL 3D 工业隧道监控实战

2019独角兽企业重金招聘Python工程师标准>>> 前言 监控隧道内的车道堵塞情况、隧道内的车祸现场&#xff0c;在隧道中显示当前车祸位置并在隧道口给与提示等等功能都是非常有必要的。这个隧道 Demo 的主要内容包括&#xff1a;照明、风机、车道指示灯、交通信号灯、…

设计模式(4)-序列生成器之单例模式

场景&#xff1a;序列生成器 系统中统一的序列生成程序&#xff0c;整个系统统一一套&#xff01;那么就用单例模式吧&#xff01; 首先看看单例模式 1&#xff09;类持有一个自己的实例&#xff0c;而且还是个静态实例。 2&#xff09;类的构造函数为私有属性。 3&#xff09;…

【Qt】通过QtCreator源码学习Qt(四):插件管理PluginManager

1、简介 QtCreator使用插件架构,方便扩展。它的核心是插件管理,主类是PluginManager。 下面是翻译src\libs\extensionsystem\pluginmanager.cpp中关于插件的一些说明,后续会详细分析插件管理的代码。 2、名字空间、主要类介绍 插件使用的名字空间是namespace:ExtensionS…

云从科技3D人体重建技术刷新3项纪录!仅凭照片即可生成精细模型

3 月 19 日&#xff0c;根据官方消息&#xff0c;云从科技基于单帧图像的 3D 人体重建技术同时在 Human3.6M、Surreal 和 UP-3D 三大数据集上创造了最新的世界纪录&#xff0c;将原有最低误差记录大幅降低 30%。Human3.6M 数据集上对比Surreal 数据集上对比UP-3D 数据集上对比3…

windows7/8 安装mysql5.7

简单记录下安装步骤&#xff1a; 网上下载了安装包&#xff0c;一路next默认即可&#xff0c;中间会出现 选择安装x64或 x86版本&#xff0c;这边科普下 x86代表32位操作系统&#xff0c;x64代表64位操作系统。 如果提示3306端口被占用&#xff0c;执行下netstat -aon|findst…

FGMap学习之--三维地图

你是否想让自己的地图以三维的形式展示出来呢&#xff1f;在三维下查看QQ地图、Bing地图、MapABC地图或者自己的地图是否有不一样的感觉呢&#xff1f;今天我们就来看看如果使用FGMap API来实现这个功能。 上次我们做了一个天气预报的示例&#xff0c;今天我们在三维地图上查看…

NLP实践:对话系统技术原理和应用

本文节选自电子工业出版社《自然语言处理实践&#xff1a;聊天机器人技术原理与应用》作者&#xff1a;王昊奋&邵浩&李方圆&张凯&宋亚楠以下是节选内容按照技术实现&#xff0c;我们可将任务驱动的对话系统划分为如下两类&#xff1a;模块化的对话系统分模块串…

沃尔沃加入英伟达阵营 2021年开卖自动驾驶汽车

随着研发的深入&#xff0c;自动驾驶行业越来越显现出合纵连横的趋势。本周&#xff0c;英伟达阵营再次迎来新的合作伙伴——沃尔沃和瑞典汽车零部件供应商Autoliv。其实此前沃尔沃的自动驾驶项目“DriveMe”所用的测试车辆就搭载了英伟达DrivePX平台&#xff0c;该公司的自动驾…

【Qt】通过QtCreator源码学习Qt(五):QLoggingCategory管理、分类、过滤打印信息

1、QLoggingCategory简介 在QtCreator源码中新学到一个类QLoggingCategory。 QLoggingCategory可以控制打印输出类别和区域。方便在调试时,过滤掉不关心的打印信息。 2、使用方法 声明 在头文件中声明,供其它文件使用 #include <QLoggingCategory> Q_DECLARE_LOGG…

个人随笔——衰人自叙卷壹

为什么80%的码农都做不了架构师&#xff1f;>>> 臣本菜鸟&#xff0c;求学于锦江&#xff0c;致力就职于专业&#xff0c;不求闻达于外企。HR不以臣级低&#xff0c;BOSS亲点&#xff0c;后召臣入研发部门&#xff0c;晓臣以编码之事&#xff0c;由是感激&#xff…

【Qt】通过QtCreator源码学习Qt(六):命令行参数解析实现

参考下大神的命令行参数解析是如何是实现的 //使用const char []代替宏定义字符串,我以前都是用const QString,想想好傻 const char SETTINGS_OPTION[] = "-settingspath"; const char INSTALL_SETTINGS_OPTION[] = "-installsettingspath"; const char…

【黑客浅析】像黑客一样思考

欢迎大家前往腾讯云社区&#xff0c;获取更多腾讯海量技术实践干货哦~ 作者&#xff1a;由云鼎实验室发表在云社区 网络安全里经常说的一句话是未知攻焉知防&#xff0c;基本所有的安全人员也是一名黑客&#xff0c;在黑客攻击愈发普遍的今天&#xff0c;如何更好的防御黑客攻击…

Python的最佳学习方式

作者 | GENEVIEVE CARLTON译者 | 姜松浩责编 | 屠敏转载自 CSDN&#xff08;ID&#xff1a;CSDNNews&#xff09;以下为译文&#xff1a;如今想要学习 Python 的人拥有比以往更多的资源。但是&#xff0c;这也可能使筛选书籍、课程和其他 Python 资源变得相对困难。并不是每个人…

Android 系统启动过程

文章来源于网络&#xff0c;心得来源于整理。请尊重作者&#xff1a;http://hi.baidu.com/guoxiaoming/blog/item/24e9e9f8c9628f1fd9f9fd89.html/cmtid/7525d63fb437a6cd7c1e713bAndroid 系统启动过程Android 从系统启动有4个步骤: 1, init进程启动 2. Native服务启动 3.Syste…

【Qt】通过QtCreator源码学习Qt(七):插件管理类简介

一、名字空间:ExtensionSystem ExtensionSystem命名空间提供了属于核心插件系统的类。 ExtensionSystem包含插件管理器及其支持类,以及必须由插件提供者实现的IPlugin接口。 二、ExtensionSystem::PluginManager:插件主类 ExtensionSystem::PluginManager简介 三、Exten…

视频直播常见问题与解决办法汇总【系列二—直播截图】

2019独角兽企业重金招聘Python工程师标准>>> 摘要&#xff1a; 使用场景 用户常需要对视频直播的内容进行分析。例如&#xff0c;需要对直播中的某一帧的内容作为封面图片或者对于直播内容进行鉴黄以查看内容合法性等需求。因此&#xff0c;视频直播提供了实时截图功…