转自http://blog.sina.com.cn/s/blog_60059a210101277j.html
函数简介

  函数功能: 打开一个文件

  函数原型:FILE * fopen(const char * path,const char * mode);

  相关函数:open,fclose,fopen_s[1] ,_wfopen

  所需库: <stdio.h>

  返回值: 文件顺利打开后,指向该流的文件指针就会被返回。若果文件打开失败则返回NULL,并把错误代码存在errno 中。

  一般而言,打开文件后会作一些文件读取或写入的动作,若打开文件失败,接下来的读写动作也无法顺利进行,所以在fopen()后请作错误判断及处理。

  参数说明:

  参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态。

  mode有下列几种形态字符串:

  r 打开只读文件,该文件必须存在。

  r+ 打开可读写的文件,该文件必须存在。

  rb+ 读写打开一个二进制文件,只允许读写数据。

  rt+ 读写打开一个文本文件,允许读和写。

  w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。

  w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。

  a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)

  a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)

  wb 只写打开或新建一个二进制文件;只允许写数据。

  wb+ 读写打开或建立一个二进制文件,允许读和写。

  wt+ 读写打开或着建立一个文本文件;允许读写。

  at+ 读写打开一个文本文件,允许读或在文本末追加数据。

  ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。

  上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。不过在POSIX系统,包含Linux都会忽略该字符。由fopen()所建立的新文件会具有S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)权限,此文件权限也会参考umask 值。

  有些C编译系统可能不完全提供所有这些功能,有的C版本不用"r+","w+","a+",而用"rw","wr","ar"等,读者注意所用系统的规定。

表格 1. fopen() 中的 mode 的可能值列表

mode

说明

'r'

只读方式打开,将文件指针指向文件头。

'r+'

读写方式打开,将文件指针指向文件头。

'w'

写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。

'w+'

读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。

'a'

写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。

'a+'

读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。

'x'

创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。这和给 底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。

'x+'

创建并以读写方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。这和给 底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。

注: 不同的操作系统家族具有不同的行结束习惯。当你写入一个文本文件并想插入一个新行时,你需要使用符合你操作系统的行结束符号。基于 Unix 的系统使用 \n 作为行结束字符,基于 Windows 的系统使用\r\n 作为行结束字符,基于 Macintosh 的系统使用 \r 作为行结束字符。

如果写入文件时使用了错误的行结束符号,则其它应用程序打开这些文件时可能会表现得很怪异。

Windows 下提供了一个文本转换标记('t')可以透明地将 \n 转换为 \r\n。与此对应你还可以使用 'b'来强制使用二进制模式,这样就不会转换你的数据。要使用这些标记,要么用 'b' 或者用 't' 作为 mode参数的最后一个字符。

默认的转换模式依赖于 SAPI 和你使用的 PHP 版本,因此为了便于移植鼓励你总是指定恰当的标记。当操作以 \n 作为行结束定界符的纯文本文件时,如果你还期望这些文件可以用于其它应用程序例如 Notepad,则应该在脚本中使用 't' 模式。在所有其它情况下使用 'b'

在操作二进制文件时如果没有指定 'b' 标记,可能会碰到一些奇怪的问题,包括坏掉的图片文件以及关于\r\n 字符的奇怪问题。

注: 为移植性考虑,强烈建议在用 fopen() 打开文件时总是使用 'b' 标记。

注: 再一次,为移植性考虑,强烈建议你重写那些依赖于 't' 模式的代码使其使用正确的行结束符并改成'b' 模式。

如果也需要在 include_path 中搜寻文件的话,可以将可选的第三个参数 use_include_path 设为 '1' 或 TRUE。 如果打开失败,本函数返回 FALSE

程序示例

  程序示例1

  #include <stdio.h>

  #include <stdlib.h> //为了使用exit()

  int main()

  {

  int ch;

  FILE* fp;

  char fname[50]; //用于存放文件名

  printf("输入文件名:");

  scanf("%s",fname);

  fp=fopen(fname,"r"); //只供读取

  if(fp==NULL) //如果失败了

  {

  printf("错误!");

  exit(1); //中止程序

  }

  //getc()用于在打开文件中获取一个字符

  while((ch=getc(fp))!=EOF)

  putchar(ch);

  fclose(fp); //关闭文件

  return 0;

  }

  注意!初学者往往会犯一个错误,即在输入文件名时不加后缀名,请注意加上!

  程序示例2[2]

  #include <stdio.h>

  FILE *stream, *stream2;

  int main( void )

  {

  int numclosed;

  // Open for read (will fail if file "crt_fopen.c" does not exist)

  if( (stream = fopen( "crt_fopen.c", "r" )) == NULL ) // C4996

  // Note: fopen is deprecated; consider using fopen_s instead

  printf( "The file 'crt_fopen.c' was not opened\n" );

  else

  printf( "The file 'crt_fopen.c' was opened\n" );

  // Open for write

  if( (stream2 = fopen( "data2", "w+" )) == NULL ) // C4996

  printf( "The file 'data2' was not opened\n" );

  else

  printf( "The file 'data2' was opened\n" );

  // Close stream if it is not NULL

  if( stream)

  {

  if ( fclose( stream ) )

  {

  printf( "The file 'crt_fopen.c' was not closed\n" );

  }

  }

  // All other files are closed:

  numclosed = _fcloseall( );

  printf( "Number of files closed by _fcloseall: %u\n", numclosed );

  }

  

  说明

  resource fopen ( string filename, string mode [, bool use_include_path [, resource zcontext]] )

  fopen() 将 filename 指定的名字资源绑定到一个流上。如果 filename 是 "scheme://..." 的格式,则被当成一个 URL,PHP 将搜索协议处理器(也被称为封装协议)来处理此模式。如果该协议尚未注册封装协议,PHP 将发出一条消息来帮助检查脚本中潜在的问题并将 filename 当成一个普通的文件名继续执行下去。

如果 PHP 认为 filename 指定的是一个本地文件,将尝试在该文件上打开一个流。该文件必须是 PHP 可以访问的,因此需要确认文件访问权限允许该访问。如果激活了 安全模式 或者 open_basedir 则会应用进一步的限制。

2 函数名: fclose

  功 能: 关闭一个流。注意:使用fclose函数就可以把缓冲区内最后剩余的数据输出到磁盘文件中,并释放文件指针和有关的缓冲区。

  用 法: int fclose(FILE *stream);

C语言函数fopen,fclose的用法相关推荐

  1. R语言函数的含义与用法,实现过程解读

    R的源起 R是S语言的一种实现.S语言是由 AT&T贝尔实验室开发的一种用来进行数据探索.统计分析.作图的解释型语言.最初S语言的实现版本主要是S-PLUS.S-PLUS是一个商业 软件,它基 ...

  2. c语言程序 fopen用法,fopen(c语言fopen函数的用法示例)

    请问如何读取 M51文件的bank fopen函数用来打开一个文件,其调用的一般形式为:文件指针名=fopen(文件名,使用文件方式): 其中,"文件指针名"必须是被说明为file ...

  3. c++中的fork函数_linux c语言 fork() 和 exec 函数的简介和用法

    linux c语言 fork() 和 exec 函数的简介和用法 假如我们在编写1个c程序时想调用1个shell脚本或者执行1段 bash shell命令, 应该如何实现呢? 其实在<stdli ...

  4. C语言的fopen()函数

    C语言的fopen()函数 fopen()的声明在头文件:#include <stdio.h> fopen()是一个常用的函数,用来以指定的方式打开文件,其原型为: ​ FILE * fo ...

  5. fopen()和fclose()的用法

    fopen()和fclose()的用法 1.fopen()函数的用法 fopen函数用于打开文件, 其调用格式为: FILE *fopen(char *filename, *type); fopen( ...

  6. C语言文件操作(一) —— 认识文件的打开/关闭(fopen / fclose)

            目录 1.初步理解打开文件 2.打开/关闭文件的函数 (1) fopen函数 (2) fclose 函数 3.fopen函数的使用 1.初步理解打开文件 站在系统的角度,每个文件被打开 ...

  7. fopen和fclose的用法

    fopen()和fclose()的用法1.fopen()函数的用法fopen函数用于打开文件, 其调用格式为:FILE *fopen(char *filename, *type);fopen()函数中 ...

  8. python语言format用法_format()函数的定义和用法总结

    本文主要给大家详细介绍的是python编程中str.format()的基本语法和高级用法,非常的详细,并附有示例,希望大家能够喜欢1. str.format 的引入在 Python 中,我们可以使用 ...

  9. python函数装饰器详解_Python语言函数装饰器用法实例详解

    这篇文章主要介绍了Python语言函数装饰器用法,以实例形式较为详细的分析了Python函数装饰器的常见使用技巧,需要的朋友可以参考下,希望对大家学习Python语言有所帮助. 本文实例讲述了pyth ...

最新文章

  1. [书目]软件制胜之道:执行的策略
  2. 计算机基础1模拟题,计算机基础模拟题1(有答案).doc
  3. 微信小程序点播插件_小程序云直播amp;云点播插件限时降价了!!!
  4. Windows下用cmd命令安装及卸载服务[转]
  5. SAP CRM和SAP Hybris的action profile
  6. 多层装饰器、带参数装饰器
  7. 基于meanshift的手势跟踪与电脑鼠标控制(手势交互系统)
  8. Java Stream API入门篇
  9. 常用webservice网址
  10. 带蓝色的紫罗兰色——五色配色篇
  11. python必学的os模块详解_讨论 - 廖雪峰的官方网站
  12. Win10如何清除运行历史记录
  13. 关于反病毒技术的想法
  14. android将照片压缩并显示,android拍照选择图库后将照片剪裁压缩显示到imageview上 -电脑资料...
  15. WOS(SCI)爬虫:风车WOS下载器
  16. limited扫描仪 pfu_扫描一气呵成:PFU新款扫描仪赏析
  17. 十几套IT培训视频教程免费下载,为你节省几万元培训费用
  18. 多种JS刷新页面代码!
  19. 使用GEOquery包下载原始数据
  20. 微分,梯度及梯度下降法

热门文章

  1. sql 除法计算一直 为0原因及解决方案
  2. UVALive - 3055 Symmetric Order【水题】【STL】
  3. Python中copy()和deepcopy()的区别
  4. 让你的Android应用支持转移到SD卡
  5. 计算机读博ccfc有用吗,考研复试面试用细节赢得导师认可
  6. 数学符号大全 打不出就复制吧
  7. 喜马拉雅数据接口 接入 demo PHP版 API
  8. 【camera】数字成像系统—初识
  9. Discuz对不起,您安装的不是正版应用的解决办法
  10. cesium实现飞行漫游