fopen函数

fopen()函数可以用来打开文件,写法如下,第一个参数是文件名路径,第二个参数的是打开文件的方式:

FILE *fp1;
fp1 = fopen("file a","r");//r代表read,表示只读
FILE *fp2;
fp2 = fopen("c:\\hzk16","rb");//读取c盘的hzk16文件,r代表read,b代表binary,表示只读二进制文件

一共有六种符号:

r: read 读
w: write 写
t: text 文本文件
b: binary 二进制文件
+: both read and write 读写
a: append 末尾追写

以下是最基本的只读只写的操作

FILE *fp;
fp = fopen("fileA","rt");//打开一个文本文件,文件必须存在,只允许读,rt: read text
fp = fopen("fileA","r");//"r" = "rt", 因为默认打开textfp = fopen("fileA","rb");//打开一个二进制文件,文件必须存在,只允许读fp = fopen("fileA","w");//新建一个文本文件,若存在原有文件则清空,只允许写
fp = fopen("fileA","wt");//"w" = "wt", 因为默认打开textfp = fopen("fileA","wb");//新建一个二进制文件,若存在原有文件则清空,只允许写

如果只允许在文件的末尾进行写入操作,可以用以下方式:

FILE *fp;
fp = fopen("fileA","a");//打开或新建一个文本文件,只允许在文件末尾追写
fp = fopen("fileA","at");//"a" = "at", 因为默认打开textfp = fopen("fileA","ab");//打开或新建一个二进制文件,只允许在文件末尾追写

+字符,可以实现读写操作。

File *fp;
fp = fopen("fileA","r+");//打开文本文件,文件必须存在,允许读写
fp = fopen("fileA","rt+");//"r+" = "rt+", 因为默认打开textfp = fopen("fileA","w+");//创建文本文件, 若已存在则清空文件内容,允许读写
fp = fopen("fileA","rt+");//"w+" = "wt+", 因为默认打开textfp = fopen("fileA","rb+");//打开二进制文件,文件必须存在,允许读写
fp = fopen("fileA","wb+");//创建二进制文件, 若已存在则清空文件内容,允许读写fp = fopen("fileA","a+");//打开或新建一个文本文件,可以读,但只允许在文件末尾追写
fp = fopen("fileA","at+");//"a+" = "at+", 因为默认打开text
fp = fopen("fileA","ab+");//打开或新建一个二进制文件,可以读,但只允许在文件末尾追写

特别注意是:

  • 带字符 r 的操作,必须有该文件存在,否则会返回空。
  • 带字符 w 的操作,如果有原文件,该操作会删除原文件,再新建文件,如果没有原文件则直接新建文件。
  • 带字符 a 的操作,如果有文件则会打开,没有就会新建,不会清空内容,但只能在尾部写

从上面看出,如果想要实现这样的操作:如果有文件就读文件,没文件就创建文件,而且保证文件是可读可写的,这个时候好像没有任何一个单一的fopen能满足需求。
如果用fopen("name", "w+"),那么如果有文件,也会被覆盖掉,
如果用fopen("name", "r+"),那么如果没有文件,会返回false,所以实现上述功能需要结合两个函数,如下所示:

if ((f = fopen(filename, "r+") == 0) //若存在文件,则直接打开f = fopen(filename, "w+"); //若不存在文件,则创建文件
if (f == 0)...report error...

fread函数

参考链接:https://overiq.com/c-programming-101/fread-function-in-c/
The syntax of fread() function is this:

fread() function is the complementary of fwrite() function. fread() function is commonly used to read binary data. It accepts the same arguments as fwrite() function does.

Syntax: size_t fread(void *ptr, size_t size, size_t n, FILE *fp);

The ptr is the starting address of the memory block where data will be stored after reading from the file. The function reads n items from the file where each item occupies the number of bytes specified in the second argument. On success, it reads n items from the file and returns n. On error or end of the file, it returns a number less than n.

举两个简单的例子:

//Example 1: Reading an array from the file
int arr[10];
fread(arr, sizeof(arr), 1, fp);//Example 2: Reading the structure variable
struct student
{char name[10];int roll;float marks;
};struct student student_1;fread(&student_1, sizeof(student_1), 1, fp);

关于fread最值得注意的一点,fread读取文件时,会自动保留当前的读取位置,也就是说,不用自己去管读取的位置在哪个字节,读取了对应文件的部分后,会自动继续往下读取,关于这里点,可以参考https://stackoverflow.com/questions/10696845/does-fread-move-the-file-pointer,具体举个例子。

#include<stdio.h>
#include<stdlib.h>struct employee
{char name[50];char designation[50];int age;float salary
} emp;int main()
{FILE *fp;fp = fopen("employee.txt", "rb");if(fp == NULL){printf("Error opening file\n");exit(1);}printf("Testing fread() function: \n\n");//循环读取,会自动往后读,而不会反复读取文件的最前面的部分while( fread(&emp, sizeof(emp), 1, fp) == 1 ){printf("Name: %s \n", emp.name);printf("Designation: %s \n", emp.designation);printf("Age: %d \n", emp.age);printf("Salary: %.2f \n\n", emp.salary);}fclose(fp);return 0;
}

输出结果:

Testing fread() function:Name: Bob
Designation: Manager
Age: 29
Salary: 34000.00Name: Jake
Designation: Developer
Age: 34
Salary: 56000.00

C语言 fopen和fread函数解析相关推荐

  1. 运行库:Windows下MSVC CRT运行库封装fread()函数解析

    在介绍运行库的过程中,强调过运行库是具体语言实现的程序和操作系统之间的抽象层.经验表明,任何系统级的软件工程,IO功能的封装历来是最具有挑战性的.以下以Windows下MSVC CRT运行库中封装的文 ...

  2. linux下 c语言 用write open二进制写文件,Linux下用C语言fopen、fread和fwrite函数对二进制文件的操作-Go语言中文社区...

    一.前言 在做一个镜头的初始化操作,需要加载一个648*522像素大小的文件,厂商提供的是一个excel表,如果要加载数据,可用加载txt文本的方式,我选用二进制方式加载文件:大家都知道电脑真正执行的 ...

  3. c分布 的程序设计语言,#2020学习打卡##C程序设计语言# C语言中的随机数函数解析...

    在计算机中并没有一个真正的随机数发生器,但是可以做到使产生的数字重复率很低,这样看起来好象是真正的随机数,实现这一功能的程序叫伪随机数发生器. 有关如何产生随机数的理论有许多,如果要详细地讨论,需要厚 ...

  4. R语言:expand.grid() 函数解析

    expand.grid() 构造一个数据框,将各参数的各水平完全搭配. 示例: type=c("A", "M")      trend=c("N&qu ...

  5. c语言 fopen、fwrite、fread、fclose函数(打开文件进行读写覆盖或追加)

    文章目录 fopen函数 描述 声明 参数 返回值 实例 fwrite函数 描述 声明 参数 返回值 实例 fread函数 描述 声明 参数 返回值 实例 fclose函数 描述 声明 参数 返回值 ...

  6. C语言“fread”函数的用法?

    C语言"fread"函数的用法为"size_tf read(void *buffer,size_t size,size_t count,FILE *stream)&quo ...

  7. C++文件读写函数之——fopen、fread和fwrite、fgetc和fputc、fgets和fputs、ftellf和fseek、rewind...

    由于最近经常使用到c语言中的读写文件,所以在此总结以下,方便以后查找. 在c中,文件操作都是由库函数来实现的,主要是分为读和写两种操作,以下详细讲解以下所有有关文件操作的邯郸乎的用法: //C++写入 ...

  8. c语言数据块写入函数,C语言数据块读写函数:fread和fwrite

    在前面曾经介绍过C语言中的各种读写函数,首先是最简单的读写一个字符的函数fputc和fgetc,在这个基础上又出现了putw和getw.fgets和fputs,此外还说过格式化读写函数fprintf和 ...

  9. c语言fread函数,C语言“fread”函数的用法?

    C语言"fread"函数的用法? C语言"fread"函数的用法为"size_tf read(void *buffer,size_t size,siz ...

最新文章

  1. 内江将被打造成四川物联网西部副中心
  2. ajax请求的完整步骤
  3. iphonex黑屏开不了机_手机突然黑屏开不了机充电没反应怎么办?别急,这样就可以解决...
  4. android脚步---不同activity之间参数传递
  5. 581. Shortest Unsorted Continuous Subarray连续数组中的递增异常情况
  6. 亚马逊推荐python_使用python查找amazon类别
  7. Everything是如何搜索的
  8. Physically Based Rendering,PBRT(光线跟踪:基于物理的渲染) 笔记
  9. 他在 Stack Overflow 提问如何黑掉Stack Overflow,结果成了
  10. 怎么发文件到服务器异常,大神帮我看看,我用async-http框架上传文件到服务器发生异常...
  11. AD9在元件库封装库添加LOGO
  12. NFT+体育,卡塔尔世界杯有哪些NFT看点!
  13. linux eof 用法,Linux下EOF 用法
  14. Matlab神经网络(一)
  15. 国内首个“新基建”安全大赛启动了!
  16. 苹果手机换电池对手机有影响吗_电池寿命真的影响手机性能~iPhone手机更换电池后性能对比...
  17. 英文文献检索网站(转)
  18. 《教妹学数据库系统》(五)逻辑数据库设计(上)
  19. 字符串分割 strsep 函数
  20. outbox计算机术语,《计算机英语常用词汇》4066(0)

热门文章

  1. iframe处理pdf文件
  2. Denuvo 防篡改技术又被攻克;饿了么回应大规模故障:已修复
  3. 8奇分频器——五分频器
  4. 研发部门管理的三驾马车
  5. 软件需求工程 课堂笔记5
  6. 谢旻C语言,清华大学出版社-图书详情-《C语言实例教程》
  7. 【MFC】GetDC函数、GetWindowDC函数 与 ReleaseDC函数介绍
  8. python常用脚本查询快递
  9. 在mysql中通配符_mysql查询中通配符的使用
  10. 输出数据库设计文档Pgsql版本