C语言文件 "w+"与"wb+"区别

本文详细介绍了文件操作的各种模式,包括文本文件和二进制文件的不同打开方式,如r、w、a等,并解释了每种模式的特点及应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这是我今天碰到的问题,现在已经解决,
希望我的整理能够帮助到你们!

w+以纯文本方式读写,而wb+是以二进制方式进行读写。
mode说明:
w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
wb 只写方式打开或新建一个二进制文件,只允许写数据。
wb+ 读写方式打开或建立一个二进制文件,允许读和写。
r 打开只读文件,该文件必须存在,否则报错。
r+ 打开可读写的文件,该文件必须存在,否则报错。
rb+ 读写方式打开一个二进制文件,只允许读写数据。
a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)
a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)
ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。
加入b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。

### C语言中 `fopen` 函数的 `'w+'` 和 `'wb'` 模式区别 #### 1. **模式定义** - `'w+'` 模式:以可读写方式打开文件。如果文件已存在,其内容会被清空;如果文件不存在,则会创建一个新文件[^3]。 - `'wb'` 模式:以二进制写入方式打开文件。如果文件已存在,其内容会被清空;如果文件不存在,则会创建一个新文件[^4]。 #### 2. **主要区别** - **文本二进制模式**: - `'w+'` 是文本模式,适合处理文本文件。在某些系统(如Windows)中,换行符 `\n` 可能会被转换为 `\r\n`。 - `'wb'` 是二进制模式,适合处理二进制文件。不会对数据进行任何转换,直接按字节写入和读取[^2]。 - **适用场景**: - `'w+'` 适用于需要同时读写文本文件的场景。 - `'wb'` 适用于需要处理二进制数据(如图片、音频文件等)的场景[^4]。 #### 3. **代码示例** ##### 使用 `'w+'` 模式 以下代码展示了如何使用 `'w+'` 模式打开文件并进行读写操作: ```c #include <stdio.h> int main() { FILE *fp = fopen("example.txt", "w+"); if (fp == NULL) { perror("Error opening file"); return -1; } // 写入文本数据 const char *data = "Hello, World!"; fwrite(data, sizeof(char), strlen(data), fp); // 将文件指针移回文件开头 rewind(fp); // 读取文件内容 char buffer[50]; fread(buffer, sizeof(char), sizeof(buffer) - 1, fp); buffer[sizeof(buffer) - 1] = '\0'; printf("Read from file: %s\n", buffer); fclose(fp); return 0; } ``` ##### 使用 `'wb'` 模式 以下代码展示了如何使用 `'wb'` 模式写入二进制数据: ```c #include <stdio.h> typedef struct { char name[20]; int age; float score; } Student; int main() { Student s = { "zhangsan", 20, 95.5f }; FILE *fp = fopen("student.dat", "wb"); if (fp == NULL) { perror("Error opening file"); return -1; } // 写入结构体数据 fwrite(&s, sizeof(Student), 1, fp); fclose(fp); return 0; } ``` #### 4. **注意事项** - 在 Windows 系统中,文本模式和二进制模式的区别较大,因为文本模式会对换行符进行自动转换。而在 Linux 系统中,这种区别通常可以忽略[^5]。 - 如果需要同时读写二进制文件,可以使用 `'wb+'` 模式[^2]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值