推荐《c陷阱与缺陷》

FILE *fp;fp = fopen(file, "r+");

编程者也许认为,程序一旦执行上述操作完毕,就可以自由地进行读取和写入的操作了。遗憾的是,事实总难遂人所愿,为了保持与过去不能同时进行读写操作的程序的向下兼容性,一个输入操作不能随后直接紧跟输出操作,反之亦然。如果同时进行输入和输出操作,必须在其中插入fseek函数调用。

这个陷阱把我坑了一把,所以将c库函数文件操作学习整理一番,方便自己以后查阅。

- FILE结构体在stdio.h中定义的FILE结构体。

#ifndef _FILE_DEFINED struct _iobuf { char *_ptr; //文件输入下一个位置 int _cnt; //当前缓冲区相对位置 char *_base; //文件起始位置 int _flag; //文件标志 int _file; //文件描述符 int _charbuf; //检查缓冲区状况,如果无缓冲区则不读取 int _bufsiz; //缓冲区大小 char *_tmpfname; //临时文件名 }; typedef struct _iobuf FILE;#define _FILE_DEFINED#endif

- 文件的打开

FILE *fopen(const char *path, const char *mode);

1.功能按照mode规定的方式去打开path里指定文件。2.参数  path是个字符指针,指向打开或建立文件的字符串  mode是指向文件处理的字符串的指针

3.返回值正常:被打开文件的FILE指针  异常:NULL,未成功打开

- 文件的关闭

int fclose(FILE *fp);

1.功能关闭由fp指出的文件,调用操作系统提供的文件关闭功能。2.参数  fp:打开文件的FILE指针3.返回值  正常:0  异常:EOF

- 文件读取①字符读取

int fgetc(FILE *stream);

1.功能从stream所指文件中读取一个字符2.参数  stream:要读取字符文件的FILE指针3.返回值  正常:返回读取字符  异常:返回EOF

②字符串读取

char *fgets(char *s, int size, FILE *stream);

1.功能从stream中读取大小为size-1的字符,最后加上字符串结束符'\0'2.参数  s:接收字符串的地址,数组或是指针  size:读取字符大小  stream:读取的文件的FILE指针3.返回值  正常:字符串首地址(char *s的地址)  异常:NULL

使用feof或是ferror去判别是否到达文件尾部和发生错误。

- 文件的写入①字符写入

int fputc(int c, FILE *stream);

1.功能把字符c写入stream指向的文件2.参数  c:字符  stream:写入的文件的FILE指针3.返回值  正常:写入字符  异常:EOF②字符串的写入

int fputs(const char *s, FILE *stream);

1.功能将str写入stream指向的文件中2.参数  s:写入字符串  stream:要写入字符串的文件的FILE指针3.返回值  正常:写入的字符串长度  异常:返回NULL

使用feof或是ferror去判别是否到达文件尾部和发生错误。

③格式化数据写入

int fprintf(FILE *stream, const char *format, ...);

1.功能与printf功能相同,写入文件中2.参数  stream:写入的文件的FILE指针  format:字符串指针,其中包含写入数据的格式3.返回值  无

- 二进制形式的读写

①二进制形式读取文件数据

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

1.功能按二进制形式将stream指向的文件的size*nmemb的数据读到ptr数据区去2.参数  ptr:viod指针类型,读到数据存放的首地址  size:数据块的大小,字节数  nmemb:一次读多少数据块  stream:要读取数据文件的FILE指针3.返回值  正常:实际读取数据块个数  异常:0(具体通过feof()和ferror()判定)②二进制形式写数据

size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);

与fread相反

③二进制形式读取一个整数

int getw(FILE *stream);

④二进制形式写入一个整数

int putw(int w, FILE *stream);

- 文件状态检查①文件结束

int feof(FILE *stream);

1.功能判断文件是否结束2.返回值  0:文件未结束  1:文件结束②文件读写出错

int ferror(FILE *stream);

1.功能检查读写stream指向的文件是否出错2.返回值  0:无错误  1:出错③错误标志清除

void clearerr(FILE *stream);

1.功能清楚stream指向的文件的错误标志

- 文件的操作的文件①当前文件位置

long ftell(FILE *stream);

1.功能文件开头与当前的偏移量2.返回值  正常:位移量  异常:-1

②倒带

void rewind(FILE *stream);

1.功能文件位置指针重新指向开头

③fseek

int fseek(FILE *stream, long offset, int whence);

1.功能使文件定位移到指定位置:基于whence的相对offest位置处2.参数  offset:字节位移量  whence:    SEEK_SET 0 文件开头    SEEK_CUR 1 文件当前位置    SEEK_END 2 文件末尾3.返回值  正常:当前位置  异常:-1

- exit()函数

void exit(int status);

1.功能使程序立即终止执行,将缓冲区数据输出并关闭所有打开文件2.参数

举报/反馈

c语言操作目录,c语言文件操作整理相关推荐

  1. c语言 文件课件,C语言课件第13章-文件操作.ppt

    C语言课件第13章-文件操作.ppt 第13章文件操作 哈尔滨工业大学计算机科学与技术学院苏小红sxh 本章学习内容 二进制文件和文本文件 文件的打开和关闭 文件的顺序读写与随机读写 标准输入输出及其 ...

  2. 学生管理系统 C语言 动态链表 结构体 文件操作 设置密码 输入密码回显星号

    C语言 学生管理系统代码 实现功能 功能:学生管理系统设计,每个学生信息作为一条记录,包括姓名.学号.专业.  性别.年龄.   电话.家庭住址.还可以继续拓展 系统要求实现以下功能: 1.输入功能: ...

  3. SpringBoot打开resources目录下的文件操作

    SpringBoot打开resources目录下的文件操作 背景 我想在SpringBoot项目中放入一个静态文件.json文件.然后在SpringBoot项目内可以打开并读取此json文件. [外链 ...

  4. C# 对Ini文件操作(C# ini文件操作类)

    *************************************************** 更多精彩,欢迎进入:http://shop115376623.taobao.com ****** ...

  5. HDFS的常用操作--hdfs下的文件操作常用命令总结

    1.创建目录命令 HDFS有一个默认的工作目录/user/$USER,其中$USER是用户的登录用户名.不过目录不会自动建立,需要mkdir建立它 命令格式:hadoop fs -mkdir 如: 在 ...

  6. python文件操作的方法_python文件操作的方法介绍

    文件操作 1.open()函数 open()函数主要用于文件处理,一般分为下面3个过程:1.打开文件 2.操作文件 3.关闭文件 常见的格式示例:f = open('note.txt','r') f. ...

  7. C 语言编程 — 输入/输出与文件操作

    目录 文章目录 目录 前文列表 输入/输出 scanf() 和 printf() getchar() 和 putchar() 文件操作 打开文件 关闭文件 写入文件 读取文件 二进制 I/O 函数 前 ...

  8. python操作目录_Python语言目录操作一

    本文主要向大家介绍了Python语言目录操作一,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. 目录操作 Python os 模块提供了一个统一的操作系统接口函数, 这些接口函数通 ...

  9. linux c文件操作,C语言文件操作(FILE)与常用文件操作函数

    文件 1.文件基本概念 C程序把文件分为ASCII文件和二进制文件,ASCII文件又称文本文件,二进制文件和文本文件(也称ASCII码文件)二进制文件中,数值型数据是以二进制形式存储的, 而在文本文件 ...

最新文章

  1. iOS - 实现映客首页 TabBar 和滑动隐藏 NavBar 和 TabBar
  2. 怎么通过ip连接oracle,Oracle 无法通过IP连接问题
  3. 第十、十一周项目五 - 摩托车继承自行车和机动车
  4. 简单配置局域网FTP
  5. NumPy之:使用genfromtxt导入数据
  6. PCL:全程详解 VS2010+PCL配置
  7. python dataframe float转string_盘点Python:Pandas1.0的主要功能
  8. c .net ajax,Asp.net mvc 2中使用Ajax的三种方式
  9. 如何ping端口_干货 | 如何正确处理常见的8大网络故障
  10. SQL_delete删除数据
  11. android 滑动缩放监听,基于Android的ViewPager动画特效实现页面左右滑动效果(实现缩放...
  12. UE4之Obj模型解构解析
  13. 【经典】具有中国特色的脑筋急转弯
  14. 共享计算机后无法访问磁盘,Win7系统下无法访问共享硬盘怎么办?
  15. vivado使用笔记(1)--防止信号被综合优化dont touch
  16. ubuntu 启动 meld、diffuse失败
  17. HTML绘制交互图,基于 HTML5 Canvas 的交互式地铁线路图
  18. 探索编译软件栈新范式;高端GPU禁售的影响;陈天奇DL系统免费课程|AI系统前沿动态
  19. vue 导出为 word
  20. 《缠中说禅108课》9:甄别“早泄”男的数学原则

热门文章

  1. XenServer 6.5实战系列之三:Prepare for XenServer 6.5
  2. Bash+R: howto pass parameters from bash script to R(转)
  3. 1815. 计算两点间的距离
  4. flex自定义的分区域状态显示控件——原创
  5. 安装SQL SERVER 2000时提示:以前的某个程序安装已在安装计算机上创建挂起的文件操作。...
  6. C# 如何生成一个时间戳
  7. 反射型XSS漏洞详解
  8. MySQL 高可用:mysql+mycat实现数据库分片(分库分表)
  9. 超大数据量存储常用数据库分表分库算法总结
  10. regedit start mysql_MySQL安装完成配置的时候start service报错