fopen用法: fp = fopen(filename,“mode”)
mode参数 r, w, a, r+, w+, a+ 具体区别:
r : 只能读, 必须存在, 可在任意位置读取
w : 只能写, 可以不存在, 必会擦掉原有内容从头写
a : 只能写, 可以不存在, 必不能修改原有内容, 只能在结尾追加写, 文件指针无效
r+ : 可读可写, 必须存在, 可在任意位置读写, 读与写共用同一个指针
w+ : 可读可写, 可以不存在, 必会擦掉原有内容从头写
a+ : 可读可写, 可以不存在, 必不能修改原有内容, 只能在结尾追加写, 文件指针只对读有效 (写操作会将文件指针移动到文件尾)
r+ 和 w+ 的区别:
r+ 是可以直接写在文件上,读取和写入的光标都在文件开头。
w+ ,如果文件已经存在,将建立一个新文件覆盖原文件,并且支持读取。
a+ 和 r+的区别:
a+只能在文件最后补充,光标在结尾。
r+可以覆盖前面的内容,光标在开头
例子如下:
FILE *iproj; /* Project File */
iproj = fopen("projectName.txt", "r");
fopen打开文件成功,返回文件指针(赋值给iproj),打开失败则返回NULL值;
【扩展】正斜杠和反斜杠
正斜杠,又称左斜杠,符号是" / “;反斜杠,也称右斜杠,符号是” \ "。
【文件路径】相对路径与绝对路径
1.绝对路径
使用fopen打开绝对路径下的文件,没有问题,值得注意的是路径中可以使用/也可以使用//,在vs2010中都能正确读取。
iproj = fopen("F:\\PIHM\\PIHM\\version 2.2\\PIHM_v2.2\\PIHM_v2.2\\projectName.txt", "r");
给出了从盘符开始的全部路径,这里需要注意的是“\”要用双斜线"\",采用“\”会提示警告⚠(“P”:不可识别的字符转义序列)。
【注意】对相对路径而言,路径表示中的“\”也要用双斜线"\",c++中\是一种转义字符,表示一个\,就像\n表示回车一样。
2.相对路径
vc工程默认访问的目录是工程目录,相对路径有以下多种形式,如:
pDummyFile = fopen("dummy.bmp", "rb");
bmp文件就在vc工程目录下,和dsw文件同属一个目录。
pDummyFile = fopen("..\\texture\\dummy.bmp", "rb");
表示bmp文件在工程目录的同级目录texture中,因此路径是先退出工程目录再进入texture目录访问到bmp文件。“…”表示退到当前目录的上一级目录(父目录)。
pDummyFile =fopen(".\\texture\\dummy.bmp", "rb");
表示bmp文件就在工程目录的子目录texture中,“.”表示当前默认目录,即vc工程目录,然后在进入其子目录texture访问到文件。
【另】fopen_s函数用法:
err = fopen_s(&fp,filename,“mode”)
errno_t err;
FILE *fp; /* Project File */
fp = fopen("projectName.txt", "r");
err = fopen_s(&fp, "projectName.txt", "mode");
打开文件成功返回0,失败返回非0。
fopen_s函数比fopen函数多了溢出检测,更安全一些。
上例用fopen_s函数实现如下: