【代码模板】C语言中fopen打开文件的12种权限?5个关键字?2类文件?(5个关键字rwa+b,b来区分是否二进制,+表示读写,wa不仅表示写表示操作模式)

快速回忆:
b 见b表示二进制方式打开,一般都用该种方式较好
w 见w表示覆盖写,会清空,不存在会创建。 所以一般不用r这种。
如果要追加用a
+表示读写
如果读写都要开不是rw,而是r+。也就是写不是w表示写。 wa表示写的两种方式 清空和追加。写的权限不用w表示,w主要特指清空。如此记忆比较方便

在C语言里,fopen函数用于打开文件,它的第二个参数是模式字符串,规定了文件的打开方式。
r表示读
w表示写
a表示追加方式打开,不存在会创建
r+表示读写方式打开,不存在会报错
w+表示读写方式打开,不存在会创建;存在会覆盖。
a+表示读写方式打开,写入会追加

w和a的区别在于a追加,w覆盖。
r必须存在。如果不存在自动创建用w或者a。如果不想清空用a。
带+表示读写都有。这里理解w的本质不是表示写,而是表示清空写。所以才有了+来表示读写,而不直接用rw。

带b的是处理二进制文件。
rb 必须存在
wb 存在则清空,不存在创建新的。
ab 追加 (同字符模式)
以及这些值带+,如上所述+表示读写都有,比如r的时候如果带+可以写入。wb和ab带+ 表示有读取的能力,也就是有对应的偏移指针。
rb+、wb+、ab+

1. 文本模式

  • r:以只读方式打开文本文件,文件必须存在。
#include <stdio.h>

int main() {
    FILE *fp = fopen("test.txt", "r");
    if (fp == NULL) {
        perror("文件打开失败");
        return 1;
    }
    // 使用文件
    fclose(fp);
    return 0;
}
  • w:以写入方式打开文本文件。若文件存在,内容会被清空;若文件不存在,则创建新文件。
#include <stdio.h>

int main() {
    FILE *fp = fopen("test.txt", "w");
    if (fp == NULL) {
        perror("文件打开失败");
        return 1;
    }
    fputs("Hello, World!", fp);
    fclose(fp);
    return 0;
}
  • a:以追加方式打开文本文件。若文件存在,写入的数据会添加到文件末尾;若文件不存在,则创建新文件。
#include <stdio.h>

int main() {
    FILE *fp = fopen("test.txt", "a");
    if (fp == NULL) {
        perror("文件打开失败");
        return 1;
    }
    fputs("Appended text", fp);
    fclose(fp);
    return 0;
}
  • r+:以读写方式打开文本文件,文件必须存在。
#include <stdio.h>

int main() {
    FILE *fp = fopen("test.txt", "r+");
    if (fp == NULL) {
        perror("文件打开失败");
        return 1;
    }
    // 读写操作
    fclose(fp);
    return 0;
}
  • w+:以读写方式打开文本文件。若文件存在,内容会被清空;若文件不存在,则创建新文件。
#include <stdio.h>

int main() {
    FILE *fp = fopen("test.txt", "w+");
    if (fp == NULL) {
        perror("文件打开失败");
        return 1;
    }
    fputs("New content", fp);
    rewind(fp);
    // 读取操作
    fclose(fp);
    return 0;
}
  • a+:以读写方式打开文本文件。若文件存在,写入的数据会添加到文件末尾;若文件不存在,则创建新文件。读写位置可以在文件任意处,但写入时总是追加到末尾。
#include <stdio.h>

int main() {
    FILE *fp = fopen("test.txt", "a+");
    if (fp == NULL) {
        perror("文件打开失败");
        return 1;
    }
    fputs("Appended content", fp);
    rewind(fp);
    // 读取操作
    fclose(fp);
    return 0;
}

2. 二进制模式

在文本模式的基础上,在模式字符串后面加上b,就成了二进制模式,用于处理二进制文件。

  • rb:以只读方式打开二进制文件,文件必须存在。
  • wb:以写入方式打开二进制文件。若文件存在,内容会被清空;若文件不存在,则创建新文件。
#include <stdio.h>

int main() {
    FILE *fp = fopen("test.bin", "wb");
    if (fp == NULL) {
        perror("文件打开失败");
        return 1;
    }
    int num = 123;
    fwrite(&num, sizeof(int), 1, fp);
    fclose(fp);
    return 0;
}
  • ab:以追加方式打开二进制文件。若文件存在,写入的数据会添加到文件末尾;若文件不存在,则创建新文件。
  • rb+:以读写方式打开二进制文件,文件必须存在。
  • wb+:以读写方式打开二进制文件。若文件存在,内容会被清空;若文件不存在,则创建新文件。
  • ab+:以读写方式打开二进制文件。若文件存在,写入的数据会添加到文件末尾;若文件不存在,则创建新文件。读写位置可以在文件任意处,但写入时总是追加到末尾。

这些模式参数能让你根据不同的需求对文件进行操作。在处理二进制文件时,一定要使用二进制模式,这样可以避免文本模式下可能出现的换行符转换等问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值