编译C ++代码时出现ios :: nocreate错误

时间:2009-06-30 10:13:24

标签: c++ linux g++ iostream

同时编译一个在RHEL 5.0上用C ++编写的包。我收到以下错误。

>错误:nocreate不是std::ios

的成员

源代码对应于:

  

ifstream tempStr(argv[4]ios::in | ios::nocreate);


我试过了

  

#g ++ -O -Wno-deprecated< file.cpp> -o< file>

以及:

  

#g ++ -O -o< file>

请提出解决方案。

3 个答案:

答案 0 :(得分:8)

ios::nocreate不是标准C ++的一部分 - 你期望它做什么?

编辑:从谷歌看来,它似乎是为了防止文件被创建(如果它尚不存在)。这是ifstreams的默认值,所以你可以说:

ifstream f( filename );
if ( ! f.is_open() ) {
    // open failed - probably because infput file does not exist  
}

答案 1 :(得分:7)

如果文件不存在,则以读取模式(ios::in)打开文件将不会创建它。你可以放弃非标准的nocreate。由于inifstream的默认值:

ifstream tempStr (argv[4]);

答案 2 :(得分:0)

您可以使用fopen和O_CREAT | O_EXCL将文件作为文件句柄打开,然后使用

将其转换为流
__gnu_cxx::stdio_filebuf<char> filebuf(posix_handle, std::ios::out);
    ostream os(&filebuf);

这使用了中定义的非标准扩展。 如果有人有更好的解决方案,我真的很想知道!