同时编译一个在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>
请提出解决方案。
答案 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
。由于in
是ifstream
的默认值:
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);
这使用了中定义的非标准扩展。 如果有人有更好的解决方案,我真的很想知道!