类似于 r , 凡是与 r 相关的 , 文件必须存在 ;
代码示例 :
#include <stdio.h> int main() { // 以 rb+ 读写方式 打开 二进制文件 FILE *p = fopen("D:\\a.txt", "rb+"); if(p == NULL) { printf("File Open Failed !\n"); }else { printf("File Open Success !\n"); fputs("Hello\n", p); fputs("World\n", p); // 如果打开成功 , 则需要关闭文件 fclose(p); } printf("Main End\n"); return 0; }
执行结果 : 使用文本查看工具输出
Hello World
使用二进制查看工具 , 输出结果 : 其中 0x0A 指的是 ‘\n’ 字符 ;
48 65 6C 6C 6F 0A 57 6F 72 6C 64 0A
4、rb+ 与 r+ 对比
在上面使用 " rb+ " 的方式打开文件 , 是以二进制形式打开的文件 , 二进制输出内容为
48 65 6C 6C 6F 0A 57 6F 72 6C 64 0A
下面的代码中 , 使用 " r+ " 的方式打开文件 , 是以文本形式打开的文件 , 二进制输出内容为
48 65 6C 6C 6F 0D 0A 57 6F 72 6C 64 0D 0A
其中 0D 是 ‘\r’ , 0A 是 ‘\n’ , 文本形式中换行被解析为 “\r\n” , 二进制形式只有 ‘\n’ ;
在 Windows 系统下 , 文本都是以 “\r\n” 作为换行符号 ;
在 Linux / Unix 系统下 , 文本都是以 ‘\n’ 作为换行符号 ;
代码示例 :
#include <stdio.h> int main() { // 以 rb+ 读写方式 打开 二进制文件 FILE *p = fopen("D:\\a.txt", "r+"); if(p == NULL) { printf("File Open Failed !\n"); }else { printf("File Open Success !\n"); fputs("Hello\n", p); fputs("World\n", p); // 如果打开成功 , 则需要关闭文件 fclose(p); } printf("Main End\n"); return 0; }
文本方式下 , 换行是 0D 0A , 二进制方式下 , 将数据原封不动输出 ;
在 Windows 下使用文本模式和二进制模式读写数据是不同的 ;
但在 Linux / Unix 下使用文本模式和二进制模式读写文件没有区别 ;
5、rw+
rw+ : 以读写方式打开文本文件 , 允许读写 ;
如果文件存在 , 则 文件打开成功 ;
如果文件不存在 , 返回的 FILE *p 为 NULL ;
写出时 , 将该文件原有数据覆盖 , 即文件长度清 0 00 , 删除文件内容 , 重新写入文件内容 ;
代码示例 :
#include <stdio.h> int main() { // 以 rw+ 读写方式 打开文件 FILE *p = fopen("D:\\a.txt", "rw+"); if(p == NULL) { printf("File Open Failed !\n"); }else { printf("File Open Success !\n"); fputs("Hello\n", p); fputs("World\n", p); // 如果打开成功 , 则需要关闭文件 fclose(p); } printf("Main End\n"); return 0; }
如果文件存在 , 则文件打开成功 , 写出数据成功 , 写出时覆盖之前的内容 ;
如果文件不存在 , 则打开失败 ;