C语言 fopen和fread函数解析

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", 因为默认打开text fp = fopen("fileA","rb");//打开一个二进制文件,文件必须存在,只允许读 fp = fopen("fileA","w");//新建一个文本文件,若存在原有文件则清空,只允许写 fp = fopen("fileA","wt");//"w" = "wt", 因为默认打开text fp = fopen("fileA","wb");//新建一个二进制文件,若存在原有文件则清空,只允许写

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

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

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

File *fp; fp = fopen("fileA","r+");//打开文本文件,文件必须存在,允许读写 fp = fopen("fileA","rt+");//"r+" = "rt+", 因为默认打开text fp = fopen("fileA","w+");//创建文本文件, 若已存在则清空文件内容,允许读写 fp = fopen("fileA","rt+");//"w+" = "wt+", 因为默认打开text fp = 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:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzsgpz.html