专栏首页流媒体C语言文件打开方式

C语言文件打开方式

fopen打开模式

  • r 以只读方式打开文件,该文件必须存在。
  • r+ 具有读写属性,从文件头开始写,保留原文件中没有被覆盖的内容。 当PATH1对应文件不存在时候,发现r+方式打开失败。新建文件后执行程序 运行结果为:第一次的内容被覆写 [r+ read] abcdefg [r read] abcdefg ----------------- [r+ read] 123defg [r read] 123defg
  • w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。 运行结果:第一次写的内容被清空 [r read] abcdefg ----------------- [r read] 123
  • w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。 运行结果: [w+ read] abcdefg [r read] abcdefg ----------------- [w+ read] 123 [r read] 123
  • a 以追加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。 运行结果:第二次写的内容追加在第一次写的内容中 [r read] abcdefg ----------------- [r read] abcdefg123
  • a+ 以追加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 [a+ read] abcdefg [r read] abcdefg ----------------- [a+ read] abcdefg123 [r read] abcdefg123
示例代码
#include <stdio.h>
#include <mem.h>

char *PATH1 = "D:\\code\\CProject\\FileDemo\\1";

void write(const char *content, const char *path, const char *mode, int isRead);

void read(const char *path);

struct MODE {
    char mode[5];
    int isRead;
};

int main() {
    //文本文件写的模式
    struct MODE modes[] = {
            {"r+", 1},
            {"w",  0},
            {"w+", 1},
            {"a",  0},
            {"a+", 1},
    };
    for (int i = 0; i < 5; i++) {
        struct MODE mode = modes[i];
        printf("=========%s write==========\n", mode.mode);
        write("abcdefg", PATH1, mode.mode, mode.isRead);
        read(PATH1);
        printf("-----------------\n");
        write("123", PATH1, mode.mode, mode.isRead);
        read(PATH1);
        printf("\n");
        write("", PATH1, "w", 0);
    }
    return 0;
}

void write(const char *content, const char *path, const char *mode, int isRead) {
    FILE *file = fopen(path, mode);
    if (file == NULL) {
        return;
    }
    fputs(content, file);
    //是否读文件
    if (isRead == 1) {
        //指针偏移到文件首
        fseek(file, 0, SEEK_SET);
        char str[50];
        fgets(str, 50, file);
        printf("[%-3s read]  %s\n", mode, str);
    }
    fclose(file);
}

//读取文件内容
void read(const char *path) {
    FILE *file = fopen(path, "r");
    if (file == NULL) {
        return;
    }
    char str[50];
    fgets(str, 50, file);
    printf("[%-3s read]  %s\n", "r", str);
    fclose(file);
}

运行结果

=========r+ write==========
[r+  read]  abcdefg
[r   read]  abcdefg
-----------------
[r+  read]  123defg
[r   read]  123defg

=========w write==========
[r   read]  abcdefg
-----------------
[r   read]  123

=========w+ write==========
[w+  read]  abcdefg
[r   read]  abcdefg
-----------------
[w+  read]  123
[r   read]  123

=========a write==========
[r   read]  abcdefg
-----------------
[r   read]  abcdefg123

=========a+ write==========
[a+  read]  abcdefg
[r   read]  abcdefg
-----------------
[a+  read]  abcdefg123
[r   read]  abcdefg123

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • C语言编译过程

    预编译结果解释 # linenum filename flags 分别对应行号、文件、标识。 flag对应的含义

    用户2929716
  • Linux下Mysql安装配置

    安装包 这里以centos 6.8 为例。下载Bundle包。然后解压:

    用户2929716
  • STL(一)vector、set/multiset、listVectorSetmultisetlist

    vector封装数组,list封装了链表,map和set封装了二叉树等。set关联式容器。set作为一个容器也是用来存储同一数据类型的数据类型,并且能从一个数据...

    用户2929716
  • 案例 | 全民旅游时代,飞兔之旅如何借力互联网发展品牌

    飞兔之旅自成立伊始,专注北美定制行,私家包团。丰富的海外生活经历和对旅游的极致热情,让这支团队决心做专业定制旅行,以专业的视角,根据兴趣爱好,旅行者情况,为您量...

    微梦科技
  • ZRDay6A. 萌新拆塔(三进制状压dp)

    首先,每次打完怪之后吃宝石不一定是最优的,因为有模仿怪的存在,可能你吃完宝石和他打就GG了。。

    attack
  • kubernetes-8:kibana容器化

    http://toutiao.com/item/6699441606832947723/

    千里行走
  • AI讲房、VR看房、楼盘字典……居住服务领域的一哥,走了这样一条产业互联网之路

    一年时间,贝壳找房已覆盖98个城市,入驻的新经纪品牌160个,为超过20万名经纪人提供服务,链接门店2.1万个。

    量子位
  • Python编码转换

    有些时候因为某些需要,就例如我们用的是utf-8的编码格式编写的脚本,需要在Windows终端中运行,而Windows终端默认的编码格式是GBK,这时候我们就要...

    用户2398817
  • springboot 学习mybatis+mysql读写分离(一写多读)+事务

    https://github.com/269941633/spring-boot-mybatis-mysql-write-read

    凯哥Java
  • [教程]一份简单易懂的 TensorFlow 教程

    上周分享了一份 TensorFlow 官方的中文版教程,这次分享的是在 Github 上的一份简单易懂的教程,项目地址是:

    材ccc

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动