前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言文件打开方式

C语言文件打开方式

作者头像
用户2929716
发布2018-08-23 13:12:45
1.5K0
发布2018-08-23 13:12:45
举报
文章被收录于专栏:流媒体流媒体

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
示例代码
代码语言:javascript
复制
#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);
}

运行结果

代码语言:javascript
复制
=========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
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.07.12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • fopen打开模式
    • 示例代码
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档