明白了 fopen 的参数 w+, r+, a+

本文详细解释了不同文件操作模式的特点及区别,包括追加(a)、读写(r+)、创建(w+)和追加读(a+)。阐述了各种模式下文件指针的位置及其对读写操作的影响。

本来想写自己的理解的……结果查查发现这个把细节写的很好很完美,直接粘过来算了:

"a" Append to a file. Writing operations append data at the end of the file. The file is created if it does not exist.
"r+" Open a file for update both reading and writing. The file must exist.
"w+" Create an empty file for both reading and writing. If a file with the same name already exists its content is erased and the file is treated as a new empty file.
"a+" Open a file for reading and appending. All writing operations are performed at the end of the file, protecting the previous content to be overwritten. You can reposition (fseek, rewind) the internal pointer to anywhere in the file for reading, but writing operations will move it back to the end of file. The file is created if it does not exist.

简要提炼下:

r+ 和 w+ 的区别:

r+ 是可以直接写在文件上,读取和写入的光标都在文件开头。

w+ ,如果文件已经存在,将建立一个新文件覆盖原文件(很缺德啊……),并且支持读取。

a+ 和 r+:

a+只能在文件最后补充,光标在结尾。

r+可以覆盖前面的内容,光标在开头

### 使用 `fopen` 函数的 `w+` 模式 `w+` 模式用于以可读写的方式打开文件。如果文件已经存在,则文件长度会被清零,即原有内容会被删除;如果文件不存在,则会创建一个新的文件[^3]。以下是关于 `w+` 模式的详细说明和示例代码。 #### 1. **模式特点** - 文件以可读写方式打开。 - 如果文件存在,原有内容将被清除。 - 如果文件不存在,将创建一个新文件。 - 支持对文件进行读取和写入操作。 #### 2. **示例代码** 以下是一个使用 `w+` 模式的 C 程序示例,展示了如何打开文件、写入数据以及读取数据。 ```c #include <stdio.h> int main() { // 打开或创建文件,使用 w+ 模式 FILE *fp = fopen("example.txt", "w+"); if (fp == NULL) { perror("Error opening file"); return -1; } // 写入数据到文件 const char *data_to_write = "Hello, World!"; size_t bytes_written = fwrite(data_to_write, sizeof(char), strlen(data_to_write), fp); if (bytes_written != strlen(data_to_write)) { perror("Error writing to file"); fclose(fp); return -1; } // 将文件指针移回文件开头以便读取 rewind(fp); // 从文件中读取数据 char buffer[50]; size_t bytes_read = fread(buffer, sizeof(char), sizeof(buffer) - 1, fp); buffer[bytes_read] = '\0'; // 确保字符串以 null 结尾 printf("Read from file: %s\n", buffer); // 关闭文件 fclose(fp); return 0; } ``` #### 3. **代码解析** - **文件打开**:通过 `fopen("example.txt", "w+")` 打开或创建文件 `example.txt`,并确保可以进行读写操作。 - **写入数据**:使用 `fwrite` 将字符串 `"Hello, World!"` 写入文件。 - **读取数据**:调用 `rewind(fp)` 将文件指针移回文件开头,然后使用 `fread` 读取文件内容。 - **关闭文件**:完成操作后调用 `fclose(fp)` 关闭文件[^3]。 #### 4. **注意事项** - 在使用 `w+` 模式时,如果文件已存在,其内容会被清空,因此在操作前需要确认是否需要保留原有内容。 - 如果仅需追加内容而不覆盖原有数据,应考虑使用 `a+` 模式[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值