2009-06-30 166 views
4

在RHEL 5.0上編譯用C++編寫的程序包時。我收到以下錯誤。編譯C++代碼時發生錯誤ios :: nocreate

>錯誤:nocreate不是std::ios

的源代碼對應於構件:

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


我試圖

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

以及:

#g++ -O -o <file>

請提出解決方案。

回答

8

ios::nocreate不是標準C++的一部分 - 你期望它做什麼?

編輯:從谷歌,它似乎是爲了防止文件被創建,如果它不存在。這是ifstreams默認的,所以你可以只說:

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

我正在構建一個開源軟件包,並且此錯誤正在拋出。他們沒有太多的支持,因此想知道。 – 2009-06-30 10:28:13

+0

「ios :: nocreate不是標準C++的一部分 - 你期望它做什麼?」 - 認真嗎? – jww 2014-02-16 20:14:12

7

打開以讀模式(ios::in)的文件,如果不存在,也不會創建它。你可以放棄非標準的nocreate。而且,由於inifstream默認:

ifstream tempStr (argv[4]); 
0

可以使用的fopen和O_CREAT打開該文件作爲一個文件句柄| O_EXCL,然後用它轉換成流

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

此使用非標準擴展定義在。 如果有人有更好的解決方案,我真的想知道!