文章目录

  • 一、fopen 函数
  • 二、fopen 函数文件打开方式详解
    • 1、r
    • 2、r+
    • 3、rb+
    • 4、rb+ 与 r+ 对比
    • 5、rw+
    • 6、w
    • 7、w+
    • 8、a
    • 9、a+
  • 三、文件打开方式总结

一、fopen 函数


fopen 函数用于打开文件 , 函数原型如下 ;

FILE *fopen(const char *filename, const char *mode);

const char *filename 参数 : 文件名 ;

const char *mode 参数 : 文件的打开方式 ;

二、fopen 函数文件打开方式详解


1、r

r : 以只读方式打开 , 文件必须存在 ;

  • 如果文件存在 , 则 文件打开成功 ;
  • 如果文件不存在 , 返回的 FILE *p 为 NULL ;

通过判定 FILE* 类型的返回值是否为 NULL , 可以判断文件是否打开成功 , 文件不存在 , 权限不足 , 等都会导致文件打开失败 ;

#include <stdio.h>int main()
{// 以 r 方式打开文件FILE *p = fopen("D:\\a.txt", "r");if(p == NULL){printf("File Open Failed !\n");}else{printf("File Open Success !\n");// 如果打开成功 , 则需要关闭文件fclose(p);}printf("Main End\n");return 0;
}

文件存在 , 则打开成功 ;

文件不存在则打开失败 ;

2、r+

r+ : 以读写方式打开文件 ; 文件必须存在 ;

  • 如果文件存在 , 则 文件打开成功 ;
  • 如果文件不存在 , 返回的 FILE *p 为 NULL ;

类似于 r , 凡是与 r 相关的 , 文件必须存在 ;

3、rb+

rb+ : 以 读写的方式 打开 二进制文件 ; 文件必须存在 ;

  • 如果文件存在 , 则 文件打开成功 ;
  • 如果文件不存在 , 返回的 FILE *p 为 NULL ;

类似于 r , 凡是与 r 相关的 , 文件必须存在 ;

代码示例 :

#include <stdio.h>int main()
{// 以 rb+ 读写方式 打开 二进制文件FILE *p = fopen("D:\\a.txt", "rb+");if(p == NULL){printf("File Open Failed !\n");}else{printf("File Open Success !\n");fputs("Hello\n", p);fputs("World\n", p);// 如果打开成功 , 则需要关闭文件fclose(p);}printf("Main End\n");return 0;
}

执行结果 : 使用文本查看工具输出

Hello
World

使用二进制查看工具 , 输出结果 : 其中 0x0A 指的是 ‘\n’ 字符 ;

48 65 6C 6C 6F 0A 57 6F 72 6C 64 0A

4、rb+ 与 r+ 对比

在上面使用 " rb+ " 的方式打开文件 , 是以二进制形式打开的文件 , 二进制输出内容为

48 65 6C 6C 6F 0A 57 6F 72 6C 64 0A

下面的代码中 , 使用 " r+ " 的方式打开文件 , 是以文本形式打开的文件 , 二进制输出内容为

48 65 6C 6C 6F 0D 0A 57 6F 72 6C 64 0D 0A

其中 0D 是 ‘\r’ , 0A 是 ‘\n’ , 文本形式中换行被解析为 “\r\n” , 二进制形式只有 ‘\n’ ;

在 Windows 系统下 , 文本都是以 “\r\n” 作为换行符号 ;

在 Linux / Unix 系统下 , 文本都是以 ‘\n’ 作为换行符号 ;

代码示例 :

#include <stdio.h>int main()
{// 以 rb+ 读写方式 打开 二进制文件FILE *p = fopen("D:\\a.txt", "r+");if(p == NULL){printf("File Open Failed !\n");}else{printf("File Open Success !\n");fputs("Hello\n", p);fputs("World\n", p);// 如果打开成功 , 则需要关闭文件fclose(p);}printf("Main End\n");return 0;
}

文本方式下 , 换行是 0D 0A , 二进制方式下 , 将数据原封不动输出 ;

在 Windows 下使用文本模式和二进制模式读写数据是不同的 ;

但在 Linux / Unix 下使用文本模式和二进制模式读写文件没有区别 ;

5、rw+

rw+ : 以读写方式打开文本文件 , 允许读写 ;

  • 如果文件存在 , 则 文件打开成功 ;
  • 如果文件不存在 , 返回的 FILE *p 为 NULL ;
  • 写出时 , 将该文件原有数据覆盖 , 即文件长度清 000 , 删除文件内容 , 重新写入文件内容 ;

代码示例 :

#include <stdio.h>int main()
{// 以 rw+ 读写方式 打开文件FILE *p = fopen("D:\\a.txt", "rw+");if(p == NULL){printf("File Open Failed !\n");}else{printf("File Open Success !\n");fputs("Hello\n", p);fputs("World\n", p);// 如果打开成功 , 则需要关闭文件fclose(p);}printf("Main End\n");return 0;
}

如果文件存在 , 则文件打开成功 , 写出数据成功 , 写出时覆盖之前的内容 ;

如果文件不存在 , 则打开失败 ;

6、w

w : 以写的方式打开文件 ;

  • 如果文件不存在 , 就创建文件 ;
  • 如果文件存在 , 覆盖原有数据重新写入数据 ;
  • 写出时 , 将该文件原有数据覆盖 , 即文件长度清 000 , 删除文件内容 , 重新写入文件内容 ;
#include <stdio.h>int main()
{// 以 w 方式打开文件FILE *p = fopen("D:\\a.txt", "a");if(p == NULL){printf("File Open Failed !\n");}else{fputs("hello\n", p);// 如果打开成功 , 则需要关闭文件fclose(p);}printf("Main End\n");return 0;
}

执行结果 : 该程序无论执行多少次 , 显示的结果都是 hello ;

7、w+

w+ : 以 读写的方式 打开文件 ;

  • 如果文件不存在 , 就创建文件 ;
  • 如果文件存在 , 覆盖原有数据重新写入数据 ;
  • 写出时 , 将该文件原有数据覆盖 , 即文件长度清 000 , 删除文件内容 , 重新写入文件内容 ;

代码示例 :

#include <stdio.h>int main()
{// 以 w+ 读写方式 打开 二进制文件FILE *p = fopen("D:\\a.txt", "w+");if(p == NULL){printf("File Open Failed !\n");}else{printf("File Open Success !\n");fputs("Hello\n", p);fputs("World\n", p);// 如果打开成功 , 则需要关闭文件fclose(p);}printf("Main End\n");return 0;
}

执行结果 :

如果文件不存在 , 则直接创建文件 , 并写出数据 ;

如果文件存在 , 则覆盖原来的文件 , 重新写入数据 ;

8、a

a : 以 追加方式 打开写文件 ,

  • 如果文件不存在 , 则 创建文件 ;
  • 如果文件存在 , 则新写入的数据会被 追加到文件末尾 , 文件原来的数据会被保留 ;
#include <stdio.h>int main()
{// 以 a 追加方式打开文件// 如果文件不存在创建文件// 如果文件存在, 则追加数据FILE *p = fopen("D:\\a.txt", "a");if(p == NULL){printf("File Open Failed !\n");}else{// 如果文件不存在创建文件// 如果文件存在, 则追加数据fputs("hello\n", p);// 如果打开成功 , 则需要关闭文件fclose(p);}printf("Main End\n");return 0;
}

该程序执行 222 次之后 , a.txt 文本中变成了两个 hello 文本 , 这是文件追加效果 ;

9、a+

a+ : 以 追加方式 打开读写文件 ,

  • 如果文件不存在 , 则 创建文件 ;
  • 如果文件存在 , 则新写入的数据会被 追加到文件末尾 , 文件原来的数据会被保留 ;

该操作与 a 操作区别是可读 ;

三、文件打开方式总结


r : 只读方式打开文件 , 文件必须存在 ; 文件不存在打开失败 ;

+ : 读写方式打开文件 ;

w : 打开只写文件 , 文件不存在创建文件 , 文件存在覆盖文件 ;

a : 打开只写文件 , 文件不存在创建文件 , 文件存在追加文件 ;

【C 语言】文件操作 ( fopen 文件打开方式详解 )相关推荐

  1. python中with open写csv文件_Python中的CSV文件使用with语句的方式详解

    是否可以直接使用with语句与CSV文件?能够做这样的事情似乎很自然: import csv with csv.reader(open("myfile.csv")) as read ...

  2. python文件打开方式详解

    转载自https://blog.csdn.net/ztf312/article/details/47259805 第一步 排除文件打开方式错误: r只读,r+读写,不创建 w新建只写,w+新建读写,二 ...

  3. 图片或者其他文件在数据库的存储方式详解

    关于图片或者文件在数据库的存储方式归纳 商品图片,用户上传的头像,其他方面的图片.目前业界存储图片有两种做法: 1.  把图片直接以二进制形式存储在数据库中 一般数据库提供一个二进制字段来存储二进制数 ...

  4. python引用文件 mode写在后面还是前面,python3 文件操作常用mode参数用法详解

    python3:常用mode参数 t 文本模式 (默认). #假设我们有一个本地文件名为:demo.text,文件编码格式为:utf-8 #文件内容为:python工程狮 f = open('demo ...

  5. python关闭读写的所有的文件-Python文件操作:文件的打开关闭读取写入

    Python文件操作:文件的打开关闭读取写入 一.文件的打开关闭 Python能以文本和二进制两种方式处理文件,本文主要讨论在Python3中文本文件的操作. 文件操作都分为以下几个步骤: 1.打开文 ...

  6. Python对文件的三种打开方式以及with管理上下文

    文件的三种打开方式以及with管理上下文 一.文件的三种打开方式 1.1 只读 f = open(r'D:\pycharm\python\123.txt','r',encoding='utf8') d ...

  7. 转--各种文件后缀名与打开方式大全

    各种文件后缀名与打开方式大全 .aiff 声音文件 Windows media Player .!!! Netants 暂存文件 Netants .ani 动画鼠标 .arj 压缩文件 ARJ .av ...

  8. win10如何手动强制关联某个类型文件的默认程序打开方式

    win10如何手动强制关联某个类型文件的默认程序打开方式 本教程以 php文件设置为EditPlus软件作为默认打开方式为例 相信不少使用win10的朋友碰到过这样的问题:在win10系统中有时设置某 ...

  9. python以写模式打开的文件无法进读操作_Python文件操作:文件的打开关闭读取写入...

    Python文件操作:文件的打开关闭读取写入 一.文件的打开关闭 Python能以文本和二进制两种方式处理文件,本文主要讨论在Python3中文本文件的操作. 文件操作都分为以下几个步骤: 1.打开文 ...

  10. 各种文件后缀名与打开方式大全a-d

    各种文件后缀名与打开方式大全a-d 2012年01月11日 [b]扩展名 文件类型 打开方式[/b][b] .aiff 声音文件[/b][b] Windows media Player .!!! Ne ...

最新文章

  1. Android QEMU 高速管道
  2. 关于玻璃体捐献的想法
  3. 时间格式转换2020-04-09T23:00:00.000+08:00
  4. [WCF安全系列]绑定、安全模式与客户端凭证类型:NetNamedPipeBinding、NetTcpBinding与NetMsmqBinding...
  5. 论文: YOLO9000-Better,Faster,Stronger
  6. ListT转换为DataTable
  7. [转]webkit webApp 开发技术要点总结
  8. Windows 环境变量设置工具
  9. mysql geometry 维度_使用MySQL的geometry类型处理经纬度距离问题的方法
  10. [py]flask从0到1-模板/增删改查
  11. python-《Python发展前景》
  12. [Swustoj 24] Max Area
  13. IS-IS详解(二十)——IS-IS 多拓扑
  14. GreenOpenPaint简介
  15. c语言入门经典必备代码
  16. 原理图端口符号_电气百科:电气原理图和接线图区别详解
  17. UAC遭禁用?UAC知识了解
  18. 如何生成条形码并打印出来
  19. 使用Nginx实现多重流量复制
  20. 【全国第二批】供应链创新与应用示范企业和示范城市申报材料条件内容认定好处费用时间

热门文章

  1. 【C++】右值引用、移动构造函数
  2. 为什么电子元器件会老化?像人变老一样吗?
  3. java实现网站统计功能_网站访问量统计功能的实现
  4. php windows挂掉,宕机是什么意思
  5. 季节怎么形容_描写四季冬的词语 形容冬天季节的词语
  6. Python爬取Google图片(2021.11.21编写)
  7. 商业银行vh是哪个银行的简称_各个银行的简称是什么?
  8. outlook2007 有一个程序正试图以您的名义自动发送电子邮件
  9. 计算机节熊测试报告,PWC170机能实验.pptx
  10. 千万别和女程序员做同事!