2012-01-12 14 views
27

Sto cercando di utilizzare std :: fstream per io su file e voglio creare il file se non esiste già.std :: fstream non crea file

std::fstream my_stream 
    my_stream.open("my_file_name",std::fstream::binary | std::fstream::in | std::fstream::out); 
    if(!my_stream) 
     std::cout<<"error"<<strerror(errorno); 

ottengo questo risultato: "No such file or directory".

Come posso creare il file in questo caso?

risposta

38

Si sta specificando std::fstream::in nella chiamata a fstream::open(). Questo è known per costringerlo a richiedere un file esistente.

Rimuovere std::fstream::in dall'argomento mode o specificare std::fstream::trunc oltre agli altri flag.

+20

E notando che 'trunc' crea un file vuoto ogni volta. –

10

È un po 'caotico ma funziona. Non sovrascrive il file se esiste ma ne crea uno nuovo se il primo open fallisce.

std::fstream my_stream 
my_stream.open("my_file_name",std::fstream::binary | std::fstream::in | std::fstream::out); 

if(!my_stream) 
{ 
    my_stream.open("my_file_name",std::fstream::binary | std::fstream::trunc | std::fstream::out);  
    my_stream.close(); 
    // re-open with original flags 
    my_stream.open("my_file_name",std::fstream::binary | std::fstream::in | std::fstream::out); 
} 
else 
{ 
    // read something 
} 

// read/write here 
+0

È possibile rimuovere la seconda chiusura(). Semplicemente aprendolo con le bandiere "binary | in | out | trunc" funzionerà correttamente. – TorbenC

+0

Molto tardi, ma non è stato possibile my_stream.open ("my_file_name", std :: fstream :: binary | std :: fstream :: trunc | std :: fstream :: out); semplicemente my_stream.open ("my_file_name", std :: ios :: out); ? Serve solo a creare il file momentaneamente ... – user2962533

Problemi correlati