5

同时,编译一个包,在 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 <文件>

请提出解决方案。

4

3 回答 3

9

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

编辑:从谷歌看来,它似乎是为了防止文件在不存在的情况下被创建。无论如何,这是 ifstreams 的默认设置,所以你可以说:

ifstream f( filename );
if ( ! f.is_open() ) {
    // open failed - probably because infput file does not exist  
}
于 2009-06-30T10:17:04.747 回答
7

如果文件不存在,则以读取模式 ( ) 打开文件ios::in不会创建它。您可以不使用非标准的nocreate. 因为in是默认的ifstream

ifstream tempStr (argv[4]);
于 2009-06-30T10:20:50.027 回答
0

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

__gnu_cxx::stdio_filebuf<char> filebuf(posix_handle, std::ios::out);
    ostream os(&filebuf);

这使用了定义在 . 如果有人有更好的解决方案,我真的很想知道!

于 2017-06-21T06:50:47.087 回答