原文链接

常常觉得,我对很多东西都是要求会用就好,不求甚解。比如说每次一遇到文件操作,我必要查查相关的API和例子,然后依样画葫芦写下来。或许正是因为这种不求甚解的态度,让我一直处于半桶水的状态。看完了《C专家编程》后,觉得很多东西里面有包含了很多学问;开了博之后,常常希望写点有用的东西,有点像记笔记了,呵呵。记笔记有一个好处,就是要求你必须对现有的知识进行整理,然后才能有条理地写下来。昨天写算法的时候又遇到文件操作的东西了,这次索性把相关的API都整理出来,当是记了一回笔记了。

在对文件进行操作之前,要先打开文件,使用完毕后,要关闭文件。文件操作相关的API如下:

C代码 
#include <stdio.h>
FILE *fopen(const char *path, const char *mode);   //path表示文件路径,mode表示文件使用方式
int fclose( FILE* pf );  //成功关闭返回0,否则返回EOF,并且将错误记录在系统全局变量errno中//从stream当前位置读取一个字符
int getc(FILE *stream);
//将c写入stream当前位置,成功返回0,否则返回EOF
int fputc(int c, FILE *stream);
//从stream当前位置读取长度为size-1的字符串并保存于s中。成功返回s,否则返回NULL
char *fgets(char *s, int size, FILE *stream);  //将字符串写入stream
int fputs(const char *s, FILE *stream);
//读取nmemb份数据,每份大小为size,并将它们保存在ptr指向的空间。返回读取的数据大小
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
//从ptr指向的空间提取数据向stream写入nmemb份数据,每份大小为size,返回写入的数据大小
size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);
//格式读写,与标准输入输出的printf和scanf一样,只是在前面多了一个文件指针
int fprintf(FILE *stream, const char *format, ...);
int fscanf(FILE *stream, const char *format, ...);

fopen返回一个称为“文件指针”的FILE*,FILE是由系统定义的一个结构,该结构中包含有文件名、文件状态、文件当前状态等相关信息。所谓打开文件,实际上是建立文件的各种有关信息,并使文件指针指向该文件,以便进行其它操作。关闭文件则断开指针与文件之间的联系,也就禁止再对该文件进行操作。

有关文件的使用方式有以下几点说明:

1. 文件使用方式由r,w,a,t,b,+六个字符拼成,各字符的含义是:
   r(read): 读
   w(write): 写
   a(append): 追加
   t(text): 文本文件,可省略不写
   b(banary): 二进制文件
   +: 读和写

2. 凡用“r”打开一个文件时,该文件必须已经存在, 且只能从该文件读出。

3. 用“w”打开的文件只能向该文件写入。 若打开的文件不存在,则以指定的文件名建立该文件,若打开的文件已经存在,则将该文件删去,重建一个新文件。

4. 若要向一个已存在的文件追加新的信息,只能用“a ”方式打开文件。但此时该文件必须是存在的,否则将会出错。

5. 在打开一个文件时,如果出错,fopen将返回一个空指针值NULL。在程序中可以用这一信息来判别是否完成打开文件的工作,并作相应的处理。

6. 把一个文本文件读入内存时,要将ASCII码转换成二进制码, 而把文件以文本方式写入磁盘时,也要把二进制码转换成ASCII码,因此文本文件的读写要花费较多的转换时间。对二进制文件的读写不存在这种转换。

7. 标准输入文件(键盘),标准输出文件(显示器 ),标准出错输出(出错信息)是由系统打开的,可直接使用。文件关闭函数fclose()文件一旦使用完毕,应用关闭文件函数把文件关闭, 以避免文件的数据丢失等错误。

有关文件读写的一些说明:

1. 进行读取操作时,文件必须是以读或读写方式打开的,进行写操作时,必须是以写或追加方式打开的

2. 文件内部有一个位置指针,用来指向文件当前的读写位置,在文件打开时,该指针总是指向文件的第一个字符位置。

3. 对于fgets,如果在未读完size-1个字符前就遇到了EOF或换行符,则读出结束

4. fread和fwrite可以用来从文件读取结构、写入结构

文件的其他操作包括:

C代码 
//将文件的位置指针指向由whence加上偏移offset的位置,whence可以是SEEK_SET(文件起始位置)、SEEK_CUR(当前位置)、SEEK_END(终止位置)
int fseek(FILE *stream, long offset, int whence);
//返回文件当前位置
long ftell(FILE *stream);
//将位置指针指向文件头,相当于fseek(stream, 0L, SEEK_SET)
void rewind(FILE *stream);
//获取或设置文件位置指针
int fgetpos(FILE *stream, fpos_t *pos);
int fsetpos(FILE *stream, fpos_t *pos);  

C语言中的常用文件操作相关推荐

  1. c语言操作目录,c语言中目录及文件操作.doc

    1. 错误处理与错误号cat /usr/include/asm-generic/errno-base.h#define?EPERM?? 1?/* Operation not permitted */# ...

  2. C语言使用FILE指针文件操作

    C语言使用FILE指针文件操作 文件的基本概念 所谓"文件"是指一组相关数据的有序集合.这个数据集有一个名称,叫做文件名.实际上我们已经多次使用了文件,例如源程序文件.目标文件.可 ...

  3. 【C/C++语言入门篇】-- 文件操作

    [C/C++语言入门篇]-- 文件操作 收藏 此文于2010-03-09被推荐到CSDN首页 如何被推荐? 最近实在是太忙了,这篇整整就推迟了1个月了,实在是对不起.之前本打算这个模块就结束了,文件操 ...

  4. Python十大常用文件操作

    日常对于批量处理文件的需求非常多,用Python写脚本可以非常方便地实现,但在这过程中难免会和文件打交道,第一次做会有很多文件的操作无从下手,只能找度娘. 本篇文章整理了10个Python中最常用到的 ...

  5. python删除txt文件第三行_真香!Python十大常用文件操作,轻松办公

    日常对于批量处理文件的需求非常多,用Python写脚本可以非常方便地实现,但在这过程中难免会和文件打交道,第一次做会有很多文件的操作无从下手,只能找度娘. 本篇文章整理了10个Python中最常用到的 ...

  6. 按平均成绩排行c语言文件操作,学生成绩管理系统(c语言结构体以及文件操作)实验报告精选.doc...

    学生成绩管理系统(c语言结构体以及文件操作)实验报告精选 C程序设计 实验报告 编号: 姓名院系学号任课教师于萧指导教师实验地点实验时间实验名称文件操作同 组 人无预习报告(对实验主要内容的认识)得分 ...

  7. 【C语言详解】——文件操作(建议收藏)

    前言:本期我们就进入C语言的最后一部分--文件操作,说起文件,广大学子可以说苦其久已,但实际上文件这部分要掌握的内容并不多,熟知其原理即可.因为在以后的实际应用中几乎不会使用到C语言的文件,一般都是使 ...

  8. R语言中读取xlsx文件的方法

    R语言中读取xlsx文件的方法 安装包 install.packages("openxlsx") library(openxlsx) 文件名+sheet的序号 data<- ...

  9. Java语言中的常用包、访问控制

    Java常用的语言包 Java的核心类都放在Java包以及其子包下,Java扩展的许多类都放在Javax包以及其子包下.这些实用类也就是前面所说的API(应用程序接口),Oracle按这些类的功能分别 ...

最新文章

  1. flutter图片识别_Flutter 资源和图片
  2. 【亲测好用!】Centos6.5安装Sublime text 3-----可创建桌面图标
  3. android滚轮实现时间年月日选择
  4. python迭代器举例_如何最简单、通俗地理解Python的迭代器?
  5. Oracle B-tree、位图、全文索引三大索引性能比较及优缺点汇总(转载)
  6. java调用android打包_Android Gradle打包基础
  7. 欧洲与北美5G开战,最后的赢家却是高通?
  8. Find the longest route with the smallest starting point
  9. python多线程知识点(只能说是知道有多线程一个词而已,摸摸头顶,还有毛)
  10. 蓝桥杯省赛2013年Java组B组
  11. jq 如何获取和当然元素相同类名的标签_JS/JQ基于localStorage的本地数据储存指南...
  12. 高等数值计算方法第一章引论【误差,条件数】
  13. python怎么解微分方程组_python能解微分方程吗
  14. 思科网络学习笔记 | 路由概念
  15. CNN卷积神经网络原理讲解+图片识别应用(附源码)
  16. 网络七层模型及各层协议
  17. win10查看计算机系统版本,如何查看我的电脑是不是win10 1909版本?
  18. openstack搭建(私有云、公有云)云计算遇到的相关问题汇总整理
  19. json解析与XML解析
  20. 测试抑郁症的20道题(三)

热门文章

  1. rabbitmq技术的一些感悟(二)
  2. LeetCode - Easy - 637. Average of Levels in Binary Tree
  3. LeetCode - Easy - 696. Count Binary Substrings
  4. 黑客——技术的凝聚者???
  5. 想要转人工智能,程序员该如何学习?(学习路线、知识体系)
  6. Vue 实现前后端分离项目
  7. Json与List的相互转换
  8. RabbitMQ 从入门到精通 (一)
  9. 三类基于贪心思想的区间覆盖问题
  10. Session(数据)共享的前后端分离Shiro实战