ios :: errore nocreate durante la compilazione di un codice C ++
Domanda
Mentre, la compilazione di un pacchetto, scritto in C ++ su RHEL 5.0. Sto ottenendo il seguente errore.
> errore: nocreate
non è un utente di std::ios
Il codice sorgente corrisponde a:
ifstream tempStr (
argv[4]
,ios::in
|ios::nocreate
);
Ho cercato
# g ++ -O -Wno-deprecato
-o
così come:
# g ++ -o -O
Si prega di suggerire una soluzione.
Soluzione
ios::nocreate
non fa parte dello standard C ++ -? Cosa si aspetta che faccia
Modifica: Dal punto di Google, sembra che si intendeva impedire che il file che viene creato se non esiste già. Questa è l'impostazione predefinita per ifstreams comunque, quindi si può solo dire:
ifstream f( filename );
if ( ! f.is_open() ) {
// open failed - probably because infput file does not exist
}
Altri suggerimenti
L'apertura di un file in modalità di lettura (ios::in
) non crearlo se non esiste. Si può solo lasciare fuori la nocreate
non standard. E poiché in
è l'impostazione predefinita per ifstream
:
ifstream tempStr (argv[4]);
È possibile aprire il file come un filehandle utilizzando fopen e O_CREAT | O_EXCL e quindi convertirlo in un flusso utilizzando
__gnu_cxx::stdio_filebuf<char> filebuf(posix_handle, std::ios::out);
ostream os(&filebuf);
questo utilizza un'estensione non standard definito. Se qualcuno ha una soluzione migliore, voglio davvero sapere!