2010-05-24 6 views
7

¿Es posible abrir un fstream en un archivo que no existe con ambos ios :: en & ios :: out sin obtener un error?fstream entrada y salida en el archivo inexistente

+5

No olvides contestar o ayudar a quienes responden informándoles si ya has probado sus soluciones (o escríbelas con más detalles para que puedan adaptar sus respuestas). –

Respuesta

0
#include <iostream> 
#include <fstream> 
using namespace std; 

int main() { 
    fstream f("test.txt", fstream::in | fstream::out); 
    cout << f.fail() << endl; 
    f << "hello" << endl; 
    f.close();  
    return 0; 
} 

Este código imprimirá 1 y no crear el archivo "test.txt", si no lo hace la salida. Por lo tanto, no es posible abrir y fstream en un archivo que no existe sin obtener un error.

+0

Quizás quiso decir "filestr.fail () "y" filestr << "hello" << endl; "?! – Secko

+0

@Secko Sí, gracias. –

2
#include <fstream> 

ofstream out("test", ios::out); 
if(!out) 
{ 
    cout << "Error opening file.\n"; 
    return 1; 
} 

ifstream in("test", ios::in); 
if(!in) 
{ 
    cout << "Error opening file.\n"; 
    return 1; 
} 

Si se produce un error, se muestra el mensaje y se devuelve uno (1). Sin embargo, es posible compilar y ejecutar solo ofstream out("test", ios::out); y ifstream in("test", ios::in); sin ningún error. De cualquier forma, se crea el archivo test.

8

actualización: Para abrir un fstream en un archivo que no existe para la entrada y salida (acceso aleatorio) sin obtener un error, se debe proporcionar en el fstream::in | fstream::out | fstream::trunc (constructor o) open llamada. Ya que el archivo no existe, truncar el archivo a cero bytes no es drama.

Usted habría desee un error al abrir un archivo que no existe cuando se especifica solamenteios::inya que nunca será capaz de leer de la corriente de lo que es mejor para fallar antes de tiempo.

+1

Entonces, ¿por qué no abrir un archivo que no existe a través de un objeto de clase fstream arrojar un error? Ejemplo: fstream myfile; myfile.open ("this_file_doesn't_exist.txt"); // Esto no arroja ningún error. – Ketcomp

0
std::fstream f("test.txt", std::ios_base::out); 
f.close(); //file now exists always 
f.open("test.txt", fstream::in | std::ios_base::out); 
//f is open for read and write without error 

No he comprobado para garantizar que se abrirá sin error, pero me siento bastante seguro de que debería.

Cuestiones relacionadas