没有合适的资源?快使用搜索试试~ 我知道了~
首页C语言fopen等几个f函数用法.doc
C语言fopen等几个f函数用法.doc
需积分: 36 1.1k 浏览量
更新于2023-05-26
评论
收藏 100KB DOC 举报
此文件是c语言对fopen函数的用法,包含了他们的函数的参数,返回值,以及一些注意事项,具体用法详情看文件
资源详情
资源评论
资源推荐

C 语言函数 fopen
函数简介
函数功能: 打开一个文件
函数原型: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
剩余11页未读,继续阅读

















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0