相关博文:C语言之文件读写探究(一):fopen、fclose(文件的打开和关闭)
相关博文:C语言之文件读写探究(二):fputc、fgetc、feof(一次读写一个字符(文本操作))
相关博文:C语言之文件读写探究(三):fputs、fgets、feof(一次读写一行字符(文本操作))
相关博文:C语言之文件读写探究(四):fwrite、fread(一次读写一块数据(二进制操作))
相关博文:C语言之文件读写探究(五):rewind、ftell、fseek(文件指针偏移)
相关博文:C语言之文件读写探究(六):fscanf、fprintf(格式化读写文件)
相关博文:C语言之文件读写探究(七):随机读写文件

  C语言已经从接口的层面区分了。文本的读写方式和二进制的读写方式。前面我们讲的是文本的读写方式。
  所有的文件接口函数,要么以’\0’,表示输入结束,要么以’\n’,EOF(0xFF)表示读取结束。’\0’,’\n’等都是文本文件的重要标识,而二进制文件,则往往以块的形式,写入或读出。
  而所有的二进制接口对于这些标识,是不敏感的。

fwrite/fread

试读文本文件

  当我们试图用 fread 去读取文本文件时候,发现文本中的格式己经没有任何意义, 只是一个普通的字符。

写特殊字符进文件

例1:

附例1代码:

//小问学编程
#include <stdio.h>
#include <string.h>int main()
{FILE* fpw=fopen("hello.txt","wb");if(fpw==NULL)return -1;char* p="china \n is \0 great";fwrite(p,1,strlen(p)+6,fpw);fclose(fpw);return 0;
}

从文件中读特殊字符

例2:

附例2代码:

//小问学编程
#include <stdio.h>
#include <string.h>int main()
{FILE* fpr=fopen("hello.txt","rb");if(fpr==NULL)return -1;char buf[1024];int n;n=fread(buf,1,1024,fpr);printf("n=%d\n",n);for(int i=0;i<n;i++){printf("%#x\n",buf[i]);}fclose(fpr);return 0;
}

返回值的陷阱

未完,待更新

二进制读写才是本质

未完,待更新

读写结构体是强项

未完,待更新
例:本例来自小甲鱼《带你学C带你飞》P278

  有些读者可以会觉得,既然是使用文本模式打开的文件,又能够正常地将内容打印到屏幕上,那么file.txt文件中的内容一定应该是文本。使用vi命令打开file.txt文件来看看,如下图所示:

  这是典型的二进制数据,因此使用文本编辑器并不能读取其内容。不难得出结论:不管是用文本模式还是用二进制模式打开文件,都不能决定写入数据的形式,它们只是影响换行符的表现形式而已。真正决定数据是以字符的形式写入还是以二进制的形式写入,则是相关的文件读写函数。
附上例代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>struct Date
{int year;int month;int day;
};struct Book
{char name[40];char author[40];char publisher[40];struct Date date;
};int main(void)
{FILE *fp;struct Book *book_for_write, *book_for_read;book_for_write = (struct Book *)malloc(sizeof(struct Book));book_for_read = (struct Book *)malloc(sizeof(struct Book));if (book_for_write == NULL || book_for_read == NULL){printf("内存分配失败!\n");exit(EXIT_FAILURE);}strcpy(book_for_write->name, "《带你学C带你飞》");strcpy(book_for_write->author, "小甲鱼");strcpy(book_for_write->publisher, "清华大学出版社");book_for_write->date.year = 2017;book_for_write->date.month = 11;book_for_write->date.day = 11;if ((fp = fopen("file.txt", "w")) == NULL){printf("打开文件失败!\n");exit(EXIT_FAILURE);}fwrite(book_for_write, sizeof(struct Book), 1, fp);fclose(fp);if ((fp = fopen("file.txt", "r")) == NULL){printf("打开文件失败!\n");exit(EXIT_FAILURE);}fread(book_for_read, sizeof(struct Book), 1, fp);printf("书名:%s\n", book_for_read->name);printf("作者:%s\n", book_for_read->author);printf("出版社:%s\n", book_for_read->publisher);printf("出版日期:%d-%d-%d\n", book_for_read->date.year, book_for_read->date.month, book_for_read->date.day);fclose(fp);return 0;
}

C语言之文件读写探究(四):fwrite、fread(一次读写一块数据(二进制操作))相关推荐

  1. c语言写入文件不完整,求大神看看为什么不能将数据写入文件

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #include void baocunXS(struct stu *head); struct stu *creat ...

  2. SQL标准结构化语言练习,SQL增删查改,SQL实现对bank数据的操作

    一.建立一个名称为bank的数据库 二.建立表 建立branch表,设置branch_name为主键 继续此操作建立customer,account,depositor,loan,borrower表 ...

  3. C语言之文件读写探究(七):随机读写文件

    相关博文:C语言之文件读写探究(一):fopen.fclose(文件的打开和关闭) 相关博文:C语言之文件读写探究(二):fputc.fgetc.feof(一次读写一个字符(文本操作)) 相关博文:C ...

  4. C语言之文件读写探究(六):fscanf、fprintf(格式化读写文件)

    相关博文:C语言之文件读写探究(一):fopen.fclose(文件的打开和关闭) 相关博文:C语言之文件读写探究(二):fputc.fgetc.feof(一次读写一个字符(文本操作)) 相关博文:C ...

  5. C语言之文件读写探究(五):rewind、ftell、fseek(文件指针偏移)

    相关博文:C语言之文件读写探究(一):fopen.fclose(文件的打开和关闭) 相关博文:C语言之文件读写探究(二):fputc.fgetc.feof(一次读写一个字符(文本操作)) 相关博文:C ...

  6. C语言之文件读写探究(三):fputs、fgets、feof(一次读写一行字符(文本操作))

    相关博文:C语言之文件读写探究(一):fopen.fclose(文件的打开和关闭) 相关博文:C语言之文件读写探究(二):fputc.fgetc.feof(一次读写一个字符(文本操作)) 相关博文:C ...

  7. C语言之文件读写探究(二):fputc、fgetc、feof(一次读写一个字符(文本操作))

    相关博文:C语言之文件读写探究(一):fopen.fclose(文件的打开和关闭) 相关博文:C语言之文件读写探究(二):fputc.fgetc.feof(一次读写一个字符(文本操作)) 相关博文:C ...

  8. C语言之文件读写探究(一):fopen、fclose(文件的打开和关闭)

    相关博文:C语言之文件读写探究(一):fopen.fclose(文件的打开和关闭) 相关博文:C语言之文件读写探究(二):fputc.fgetc.feof(一次读写一个字符(文本操作)) 相关博文:C ...

  9. c语言实现自动打开文件夹,c语言打开文件(c语言文件打开方式代码)

    1.2 文件的输入输出函数 键盘.显示器.打印机.磁盘驱动器等逻辑设备, 其输入输出都可以通过文件管理的方法来完成.而在编程时使用最多的要算 是磁盘文件, 因此. { printf("File ope ...

最新文章

  1. 【CVPR 2018】Learning Rich Features for Image Manipulation Detection(图像篡改检测)
  2. jQuery+CSS动态改变class
  3. java集合详解_「软帝学院」Java进阶者专栏:集合框架详解3
  4. asp.net mvc项目中遇到的古怪的问题,(项目中有frame框架)
  5. centeros php,CenterOs7 安装oracle19c的方法详解
  6. shader 如何声明数组_聊聊如何正确向Compute Shader传递数组
  7. 十大算法(动图讲解)❤️超详细!
  8. 串口485接法图_485通讯接线方式
  9. 【文化课每周学习记录】2019.4.14——2019.4.20
  10. 搭建frida+木木模拟器运行环境
  11. 用小鸟云服务器搭建网站常用的伪静态设置规则
  12. Excel表格快速复制公式到最后一行,无需拖拽!
  13. 查看表空间和解决表空间扩容ORA-01119:ORA-27040问题
  14. SQL SERVER 2008 R2的累计补丁下载地址
  15. linux ps查看完整时间,Linux ps 命令查看进程启动及运行时间
  16. Git之将master合并到自己分支
  17. 前端技术学习:语义化
  18. android so strip,用于CMake构建工具链中“strip”命令的Android NDK路径变量
  19. 《幼儿园门禁管理系统可行性研究报告》
  20. (很全)英文外贸网站从建站到推广流程,外贸企业SEOer大菜鸟分享

热门文章

  1. 注解形式控制器配置(5) 数据绑定2
  2. Jsp+Servlet+Mysql实现的火车票预定管理
  3. yntaxError: Non-UTF-8 code starting with ‘\xe6‘ in file
  4. WPF中如何重新定义Main函数
  5. JAVA基础整理-6.Java数据类型
  6. python学习笔记六 初识面向对象上(基础篇)
  7. 一个用js写的接口http调试程序
  8. java 并发编程实例_java并发编程应用实例
  9. 十大经典排序算法3(Python版本)
  10. Python稳基修炼之计算机等级考试易错概念题3(含答案与解析)