ifstream没有ios::nocreate

今天在VS2010写了一个关于文件输入的小程序,但是在用ios::nocreate参数时,提示没有ios::nocreate成员,如下:

#include 
using namespace std;
int main()
{
ifstream inFile;
inFile.open("infile.txt",ios::in,ios::nocreate);
if(!inFile)
   cerr<<"不能打开infile.txt"<

编译通不过,说是未定义标识符nocreate .这是怎么回事?我该怎么办呢?
原来事情是这样的。
ios::nocreate是在C++标准制定之前在头文件中有定义的。但是因为它跟系统平台十分密切,所以在C++标准中去掉了对它的支持。为了弥补这一点,C++标准就规定ifstreaam中的open()函数默认打开方就是不创建文件,即文件不存在就打开出错,不会创建文件,这不正是ios::nocreate的功能吗?
注意:

  1. ifstream的open()函数默认打开都是不创建文件
  2. oftream的open()函数默认打开却是创建文件,即文件不存在时自动创建文件
  3. fstream如果以输入方式(ios::in)打开文件,则默认不创建文件;如果以输出方式(ios::out)打开文件,则创建文件。
一句话,输入方式打开文件时不自动创建文件,输出方式打开文件时自动创建文件。

示例如下:

#include 
using namespace std;
int main() 
{
 fstream inFile,outFile;
inFile.open("infile.txt",ios::in);
outFile.open("out.txt",ios::out);
if(!inFile)
	cerr<<"不能打开infile.txt"<

想想这也很符合逻辑,你想从一个文件中读取数据,但这个文件不存在,如果自动创建文件的话,里面什么数据都没有,那岂不是做无用功?但若你想向一个文件中写入数据,但这个文件不存在,允许自动创建,然后再把数据写入。


故,ifstream中没有ios::nocreate是没有关系的。

你可能感兴趣的:(C/C++)