鱼C论坛

 找回密码
 立即注册
查看: 16174|回复: 12

[函数快查] fopen -- 打开一个文件并返回文件指针

[复制链接]
发表于 2017-7-12 15:58:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
fopen 函数文档


函数概要:

fopen 函数用于打开一个文件并返回文件指针。


函数原型:

  1. #include <stdio.h>
  2. ...
  3. FILE *fopen(const char *path, const char *mode);
复制代码


参数解析:

参数
含义
path该参数是一个 C 语言字符串,指定了待打开的文件路径和文件名(见备注)
mode1. 该参数是一个 C 语言字符串,指定了文件的打开模式

2. 下面列举了所有可使用的打开模式:
模式
描述
"r"1. 以只读的模式打开一个文本文件,从文件头开始读取
2. 该文本文件必须存在
"w"1. 以只写的模式打开一个文本文件,从文件头开始写入
2. 如果文件不存在则创建一个新的文件
3. 如果文件已存在则将文件的长度截断为 0(重新写入的内容将覆盖原有的所有内容)
"a"1. 以追加的模式打开一个文本文件,从文件末尾追加内容
2. 如果文件不存在则创建一个新的文件
"r+"1. 以读和写的模式打开一个文本文件,从文件头开始读取和写入
2. 该文件必须存在
3. 该模式不会将文件的长度截断为 0(只覆盖重新写入的内容,原有的内容保留)
"w+"1. 以读和写的模式打开一个文本文件,从文件头开始读取和写入
2. 如果文件不存在则创建一个新的文件
3. 如果文件已存在则将文件的长度截断为 0(重新写入的内容将覆盖原有的所有内容)
"a+"1. 以读和追加的模式打开一个文本文件
2. 如果文件不存在则创建一个新的文件
3. 读取是从文件头开始,而写入则是在文件末尾追加
"b"1. 与上面 6 中模式均可结合("rb", "wb", "ab", "r+b", "w+b", "a+b")
2. 其描述的含义一样,只不过操作的对象是二进制文件(见备注)


返回值:

1. 如果文件打开成功,则返回一个指向 FILE 结构的文件指针;

2. 如果文件打开失败,则返回 NULL 并设置 errno 为指定的错误。


备注:

1. path 参数可以是相对路径(../fishc.txt)也可以是绝对路径(/home/FishC/fishc.txt),如果只给出文件名而不包含路径,则表示该文件在当前文件夹中

2. 从本质上来说,文本文件也是属于二进制文件的,只不过它存放的是相应的字符编码值。

3. 打开方式要区分文本模式和二进制模式的原因,主要是因为换行符的问题。C 语言用 \n 表示换行符,Unix 系统用 \n,Windows 系统用 \r\n,Mac 系统则用 \r。如果在 Windows 系统上以文本模式打开一个文件,从文件读到的 \r\n 将会自动转换成 \n,而写入文件则将 \n 替换为 \r\n。但如果以二进制模式打开则不会做这样的转换。Unix 系统的换行符跟 C 语言是一致的,所以不管以文本模式打开还是二进制模式打开,结果都是一样的。


演示:

  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. int main(void)
  4. {
  5.         FILE *fp;
  6.         int ch;

  7.         if ((fp = fopen("hello.txt", "r")) == NULL)
  8.         {
  9.                 printf("打开文件失败!\n");
  10.                 exit(EXIT_FAILURE);
  11.         }

  12.         while ((ch = getc(fp)) != EOF)
  13.         {
  14.                 putchar(ch);
  15.         }

  16.         fclose(fp);

  17.         return 0;
  18. }
复制代码

搜狗截图20170712190636.png


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-1-29 17:57:15 | 显示全部楼层
i love fishc
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2019-5-11 01:40:51 | 显示全部楼层
I love FishC.com!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2019-8-18 14:07:16 | 显示全部楼层
学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-9 20:57:46 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-26 14:20:56 | 显示全部楼层
?。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-9 01:09:26 | 显示全部楼层
vs2019  fopen()用法有改变
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-30 15:57:17 | 显示全部楼层
好色有道 发表于 2020-8-9 01:09
vs2019  fopen()用法有改变

对,需要改成fopen_s    后边的参数也要改,,你搞懂了么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-26 10:49:18 | 显示全部楼层
终于找到组织了I love fishc
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2021-8-16 09:33:42 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-10-6 20:23:03 | 显示全部楼层
我试了下,小甲鱼的绝对路径(/home/FishC/fishc.txt)貌似会报错;
绝对路径好像应该是(\\home\FishC\fishc.txt)才能正常编译运行
@小甲鱼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-15 09:53:53 From FishC Mobile | 显示全部楼层
好像是两个\\
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-25 15:21:26 | 显示全部楼层
小甲鱼,你的那个路径是不是写错了?我记得是反斜杠\


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-20 05:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表