文件二进制模式下r+b与rb+、w+b与wb+的区别是什么?
二进制文件打开模式中
r+b/w+b与rb+/wb+的差异 在符合C标准(如Linux、macOS、Windows标准C库)的环境中,这两组模式写法完全等价,不存在任何功能差异——不管+放在b前面还是后面,最终的文件读写行为完全一致。
核心逻辑
C标准对文件打开模式的定义只关注字符的存在与否,而非顺序:
r:基础模式为打开已存在文件(不会创建或截断)w:基础模式为创建新文件,若文件已存在则截断为空b:启用二进制模式(区别于文本模式,不会自动转换换行符等)+:在基础模式上添加读写权限(原本r是只读,w是只写,加+后变成读写)
所以:
r+b和rb+效果一致:以二进制模式打开已存在文件,支持读写,文件内容保留w+b和wb+效果一致:以二进制模式创建/截断文件,支持读写,原有内容会被清空
为什么会有“存在差异”的误解?
这种说法大多源于早年非标准的老旧编译器/运行环境(比如部分DOS时期的工具),这类环境对模式字符的顺序有严格要求,但如今主流平台的C库都严格遵循标准,顺序不再影响功能。
验证示例
用C代码可以直接验证两者等价性:
#include <stdio.h> int main() { // 测试r+b与rb+ FILE *fp1 = fopen("test.bin", "r+b"); FILE *fp2 = fopen("test.bin", "rb+"); if (fp1 && fp2) { printf("r+b 和 rb+ 打开效果一致\n"); fclose(fp1); fclose(fp2); } // 测试w+b与wb+ FILE *fp3 = fopen("test2.bin", "w+b"); FILE *fp4 = fopen("test2.bin", "wb+"); if (fp3 && fp4) { printf("w+b 和 wb+ 打开效果一致\n"); fclose(fp3); fclose(fp4); } return 0; }
在主流系统运行这段代码,会输出两组成功提示,证明模式无差异。
内容的提问来源于stack exchange,提问作者OussamaTeyib
相关产品推荐
相关产品推荐

