标题：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+ 读写打开一个二进制文件，允许读数据。
rw+ 读写打开一个文本文件，允许读和写。
w 打开只写文件，若文件存在则文件长度清为0，即该文件内容会消失。若文件不存在则建立该文件。 
w+ 打开可读写文件，若文件存在则文件长度清为零，即该文件内容会消失。若文件不存在则建立该文件。 
a 以附加的方式打开只写文件。若文件不存在，则会建立该文件，如果文件存在，写入的数据会被加到文件尾，即文件原先的内容会被保留。（EOF符保留） 
a+ 以附加方式打开可读写的文件。若文件不存在，则会建立该文件，如果文件存在，写入的数据会被加到文件尾后，即文件原先的内容会被保留。 （原来的EOF符不保留）
wb 只写打开或新建一个二进制文件；只允许写数据。
wb+ 读写打开或建立一个二进制文件，允许读和写。
ab+ 读写打开一个二进制文件，允许读或在文件末追加数据。
at+ 打开一个叫string的文件，a表示append,就是说写入处理的时候是接着原来文件已有内容写入，不是从头写入覆盖掉，t表示打开文件的类型是文本文件，+号表示对文件既可以读也可以写。
上述的形态字符串都可以再加一个b字符，如rb、w+b或ab+等组合，加入b 字符用来告诉函数库以二进制模式打开文件。如果不加b，表示默认加了t，即rt,wt,其中t表示以文本模式打开文件。由fopen()所建立的新文件会具有S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)权限，此文件权限也会参考umask 值。
有些C编译系统可能不完全提供所有这些功能，有的C版本不用"r+","w+","a+",而用"rw","wr","ar"等，读者注意所用系统的规定。
二进制和文本模式的区别
1.在windows系统中，文本模式下，文件以""代表换行。若以文本模式打开文件，并用fputs等函数写入换行符"\n"时，函数会自动在"\n"前面加上"\r"。即实际写入文件的是"" 。
2.在类Unix/Linux系统中文本模式下，文件以"\n"代表换行。所以Linux系统中在文本模式和二进制模式下并无区别。程序示例程序示例1
#include <stdio.h>
#include <stdlib.h> //为了使用exit()
int main()
{
char 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 );
}
[3]
操作
在文件操作时，需要注意以下几点问题
1、在定义文件指针时，要将文件指针指向空；如 FILE *fp = NULL;
2、文件操作完成后，需要将文件关闭，一定要注意，否则会造成文件所占用内存泄露和在下次访问文件时出现问题。
3、文件关闭后，需要将文件指针指向空，这样做会防止出现游离指针，而对整个工程造成不必要的麻烦；如：fp = NULL;
示例程序：
#include <stdio.h>
#define F_PATH "d:\myfile\file.dat"
int main(void)
{
FILE *fp = NULL; //需要注意
fp = fopen(F_PATH, "r");
if(NULL == fp)
{
return -1; //要返回错误代码
}
fclose(fp);
fp = NULL; //需要指向空，否则会指向原打开文件地址
return 0;
}
程序
php程序-fopen
(PHP 3, PHP 4, PHP 5)
fopen -- 打开文件或者 URL
说明
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 则会应用进一步的限制。
例子
<?php
$handle = fopen("/home/rasmus/file.txt", "r");
$handle = fopen("/home/rasmus/file.gif", "wb");
?>
函数
MATLAB函数fopen函数功能在matlab中，fopen也是一个打开文件的函数。在matlab的命令窗口中输入doc fopen或者help fopen就可以获得该函数的帮助信息。调用格式fileID = fopen(filename)
fileID = fopen(filename, permission)
fileID = fopen(filename, permission, machineformat)
fileID = fopen(filename, permission, machineformat, encoding)
[fileID, message]= fopen(filename, ...)
fIDs = fopen('all')
[filename, permission, machineformat, encoding]= fopen(fileID)
各种调用格式详情请参阅MATLAB帮助文档。程序示例% MATLAB: fopen()函数的使用
clc
fileID = fopen('Test.txt', 'w');
if fileID == -1
disp('fopen failed.');
return;
else
disp('fopen succeed.');
end
Str = 'It is just a test. By mayadong7349';
fprintf(fileID, '%s', Str); 
% Caution: 
disp('Now, I''d like to type the file.');
type('Test.txt');
fclose(fileID);
程序首先向文件写入字符串，然后通过type打印在屏幕上。
这里需要注意的是，如果字符串内有单撇号（'）要用两个单撇号表示一个单撇号。
用法
Oracle的UTL_FILE.FOPEN的用法
Oracle提供的文件操作包UTL_FILE包中的UTL_FILE.FOPEN负责打开一个文件。 
UTL_FILE.FOPEN(location in varchar2, filename in varchar2, open_mode in varchar2) return FILE_TYPE; 
Location 是路径参数， 
FILENAME 是文件名， 
OPEN_MODE是打开模式，'R'是读文本，'W'是写文本，'A'是附加文本，参数不分大小写，如果指定'A'但是文件不存在，它会用'W'先创建出来，'W'有覆盖的功能； 
其中的location并不能简单的指定为'D:\temp'等路径，要建立一个DIRECTORY变量并付给权限（必须以DBA身份登录）： 
create or replace directory D_OUTPUT as 'D:\TEMP'; 
grant read,write on directory D_OUTPUT to testdb; 
GRANT EXECUTE ON utl_file TO testdb; 
之后就可以用UTL_FILE包建立文件了 ：
V_FILE UTL_FILE.FILE_TYPE; 
V_FILE := UTL_FILE.FOPEN('D_OUTPUT', 'Data.txt', 'w');