【发布时间】:2009-06-30 10:13:23
【问题描述】:
同时,编译一个包,在 RHEL 5.0 上用 C++ 编写。我收到以下错误。
> 错误:nocreate 不是std::ios 的成员
源码对应:
ifstream tempStr(
argv[4],ios::in|ios::nocreate);
我试过了
#g++ -O -Wno-deprecated
-o
还有:
#g++ -O -o
请提出解决方案。
【问题讨论】:
同时,编译一个包,在 RHEL 5.0 上用 C++ 编写。我收到以下错误。
> 错误:nocreate 不是std::ios 的成员
源码对应:
ifstream tempStr(
argv[4],ios::in|ios::nocreate);
我试过了
#g++ -O -Wno-deprecated
-o
还有:
#g++ -O -o
请提出解决方案。
【问题讨论】:
ios::nocreate 不是标准 C++ 的一部分 - 你希望它做什么?
编辑:从谷歌看来,如果文件不存在,它似乎是为了防止创建文件。无论如何,这是 ifstreams 的默认设置,所以你可以说:
ifstream f( filename );
if ( ! f.is_open() ) {
// open failed - probably because infput file does not exist
}
【讨论】:
如果文件不存在,则以读取模式 (ios::in) 打开文件不会创建它。你可以不使用非标准的nocreate。因为in 是ifstream 的默认值:
ifstream tempStr (argv[4]);
【讨论】:
您可以使用 fopen 和 O_CREAT|O_EXCL 将文件作为文件句柄打开,然后使用
将其转换为流__gnu_cxx::stdio_filebuf<char> filebuf(posix_handle, std::ios::out);
ostream os(&filebuf);
这使用了定义在 . 如果有人有更好的解决方案,我真的很想知道!
【讨论】: