当前位置: 首页 > news >正文

C文件操作

C文件操作

1,概论

程序运行时,程序本身和数据一般都存放在内存中,程序运行结束后,存放在内存中的数据会被释放,如果长期保存程序运行所需的原始数据,或程序产生的结果数据,就必须以文件的形式存储到外部存储介质上.

2,C语言文件概述

1,文件与文件名
  文件是指存放在外部存储介质上的数据集合.为标识一个文件,需要给每个文件定一个文件名,文件名一般格式,主文件名.[扩展名]
2,文件分类
  可以从不同的角度对文件进行分类,
根据文件内容,可分为程序文件与数据文件,
程序文件又可以分为源文件,目标文件,可执行文件.
3,根据文件的存储形式:分为ascii和二进制文件.
ascii码文件的每一个字节存储一个字符,便于对对字符进行处理,一般占用存储空间较多,而且需花费转换时间[ascii与二进制间互为转换]
二进制文件,是把内存中的数据,原样输出到磁盘文件中,可以节省磁盘存储空间和ascii和二进制间互为转换时间.二进制文件中一个字节并对应一个字符,不能直接输出字符形式,不便于维护阅读.

3,文件读写,

读文件是指,将磁盘文件中的数据传送到内存的操作.
写文件是指,将计算机内存中的数据向磁盘文件中传.

构成文件的基本单元与流式文件
C语言将文件看作是由一个个字符[ascii码文件],或字节组成的,将这种文件称作流式文件,
在高级语言中组成文件的基本单位是记录,对文件操作的基本单位也是记录.

4,文件类型

每个被使用的文件都在内存中开辟一个区
用来存放文件的相关信息,(文件名,状态,位置),这些信息保存在一个结构体类型变量中,FILE,结构体类型由系统定义;
typedef struct
{
  int _fd; //文件描述符
  int _cleft; //缓冲区中剩下的字符
  int _mode; //文件操作
  char *_nexttc; //下一个字符位置
  char *_buff;  //文件缓冲区位置
} FILE;

5,文件操作类型,结构体类型

定义FILE类型指针变量
FILE指针类型变量定义
  FILE *指针变量名;
eg:FILE *fp;
fp是一个指向FILE结构体的指针变量;
可以使fp指向某个文件的结构体变量,从而通过该结构体变量中的文件信息来访问文件.

6,文件打开函数

fopen(),调用方式
FILE *fp;
fp=fopen(文件名,文件使用方式);
^fp-->用户自定义的文件类型指针变量;
文件的使用方式,具有特定含义的符合
fopen函数功能:以指定的方式打开指定的文件,若操作成功,则返回一个指向该文件的指针,若打开文件时错误,返回NULL;
  例如:
FILE *fp;
fp=fopen("/C/005/ruiy.dat","rw+");

7,文件的使用方式;

文件的操作模式基本字符[单独使用是对文本文件];
r -->仅为读二打开,(只读文件)
w-->仅为写打开, (建立新文件)
a -->仅为添加而打开, (写旧文件)
【注意】前面不是说了吗:C把文件看作是有一个ascii字符或一个二进制字符组成的.
2,按二进制格式读写文件,字符方式+b;
b辅助说明,按二进制格式读写文件.
eg:fp=fopen("ruiy.dat","rb");

8,fclose

usage:int fclose(FILE *指针变量名);

功能:关闭文件指针所指向的文件,正常关闭了,函数返回值为0,失败则为非0;

fclose(fp);//关闭文件所指向的文件;

9,文件读写操作

单个字符操作读写函数,

fputc函数

一般调用形式:

fputc(字符常量或变量,文件指针);

功能:把指定字符存入文件指针所指向的文件中;

如果输出失败,则返回一个EOF,(-1);

EOF是在stdio.h头文件中的定义的符合常量,值为-1,

eg:fputc(ch,fp);

其中ch为字符变量,fp为文件指针,

含义,将ch的值输出到ftp所指向的文件中

fgetc函数;

一般调用形式,字符变量=fgetc(文件指针);

功能:从文件指针所指文件中读取一个字符赋给指定的字符变量,当遇到一个文件结束符,返回一个文件结束符标志

eg:ch=fgetc(fp);

posted on 2013-11-05 16:23 秦瑞It行程实录 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/ruiy/p/file.html

相关文章:

  • 深入理解ReactRedux
  • 使用JAVA进行MD5加密后所遇到的一些问题
  • ExpandableListView使用(三)-ScrollView嵌套ExpandableListView,列表显示不全
  • ORACLE中的各种数据类型详细的介绍
  • 一个简单的golang json解析库
  • Java Web笔记 – Servlet中的Filter过滤器的介绍和使用 编写过滤器
  • java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path
  • maven中jar、war、pom的区别
  • 尝试使用word发布博客
  • Python之优先级问题(待修改)
  • Algs4-2.2.23-3根据经验给出应该在何时为子数组切换到插入排序
  • 提高Vector容器的删除效率
  • Hadoop生态系统之HDFS
  • 使用迅雷下载百度网盘2G以上文件
  • JavaScript学习(一)
  • JavaScript 如何正确处理 Unicode 编码问题!
  • 【Leetcode】104. 二叉树的最大深度
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • 4个实用的微服务测试策略
  • express如何解决request entity too large问题
  • java正则表式的使用
  • js中forEach回调同异步问题
  • LeetCode29.两数相除 JavaScript
  • 彻底搞懂浏览器Event-loop
  • 好的网址,关于.net 4.0 ,vs 2010
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 漂亮刷新控件-iOS
  • 手机端车牌号码键盘的vue组件
  • 算法系列——算法入门之递归分而治之思想的实现
  • 小程序01:wepy框架整合iview webapp UI
  • 一道面试题引发的“血案”
  • 用Python写一份独特的元宵节祝福
  • 转载:[译] 内容加速黑科技趣谈
  • 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链 ...
  • ​ArcGIS Pro 如何批量删除字段
  • ​MySQL主从复制一致性检测
  • #git 撤消对文件的更改
  • #include
  • $.ajax中的eval及dataType
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (2)nginx 安装、启停
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (十一)c52学习之旅-动态数码管
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • ***检测工具之RKHunter AIDE
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET Project Open Day(2011.11.13)
  • .net 设置默认首页
  • .NET(C#) Internals: as a developer, .net framework in my eyes
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地定义和使用弱事件
  • .NET/C# 使用反射调用含 ref 或 out 参数的方法
  • .net获取当前url各种属性(文件名、参数、域名 等)的方法