2012-01-12 14 views
27

Estoy tratando de usar std :: fstream para io en el archivo, y quiero crear el archivo si no existe.std :: fstream no crea el archivo

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); 

puedo obtener este resultado: "No existe el fichero o directorio."

¿Cómo puedo crear el archivo en este caso?

Respuesta

38

Está especificando std::fstream::in en su llamada al fstream::open(). Esto es known para forzarlo a requerir un archivo existente.

Elimine std::fstream::in de su argumento mode, o especifique std::fstream::trunc además de las otras marcas.

+20

Y observando que 'trunc' crea un archivo vacío cada vez. –

10

Es un poco complicado pero funciona. No sobrescribe el archivo si existe, pero crea uno nuevo si falla el primero.

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

Puede eliminar ese segundo close(). Simplemente abrirlo con las banderas "binary | in | out | trunc" funcionará bien. – TorbenC

+0

Muy tarde en esto, pero no pudo my_stream.open ("mi_nombre_de_archivo", std :: fstream :: binary | std :: fstream :: trunc | std :: fstream :: out); simplemente sea my_stream.open ("my_file_name", std :: ios :: out); ? Simplemente tiene la intención de crear el archivo momentáneamente ... – user2962533

Cuestiones relacionadas