Ошибка ios :: nocreate при компиляции кода C ++ - PullRequest
4 голосов
/ 30 июня 2009

Пока компилируем пакет, написанный на C ++ на RHEL 5.0. Я получаю следующую ошибку.

> ошибка: nocreate не является членом std::ios

Исходный код соответствует:

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


Я пытался

# g ++ -O -Wno-deprecated -o

а также:

# g ++ -O -o

Пожалуйста, предложите решение.

Ответы [ 3 ]

8 голосов
/ 30 июня 2009

ios::nocreate не является частью стандарта C ++ - что вы ожидаете от него?

Редактировать. Похоже, что в Google это было сделано для предотвращения создания файла, если он еще не существует. В любом случае это значение по умолчанию для ifstreams, поэтому вы можете просто сказать:

ifstream f( filename );
if ( ! f.is_open() ) {
    // open failed - probably because infput file does not exist  
}
7 голосов
/ 30 июня 2009

Открытие файла в режиме чтения (ios::in) не создаст его, если он не существует. Вы можете просто отказаться от нестандартного nocreate. И поскольку in является значением по умолчанию для ifstream:

ifstream tempStr (argv[4]);
0 голосов
/ 21 июня 2017

Вы можете открыть файл как дескриптор файла, используя fopen и O_CREAT | O_EXCL, а затем преобразовать его в поток, используя

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

это использует нестандартное расширение, определенное в. Если у кого-то есть лучшее решение, я действительно хочу знать!

...