Hola, necesito trabajar con ficheros para escribir y leer datos, hacer ambas cosas a la vez en una misma función vaya.
Tenía pensado usar FILE como hacía para C, pero sería una incoherencia debido a que estoy usando C++, y estaría dejando atrás los métodos que ofrecen sus funciones.
Mi pregunta es, que debo hacer ¿crear un ifstream para leerlo, liberarlo y crear luego un ofstream para escribir en el?. No creo que sea haga así.
¿No hay una clase, que maneje archivos con métodos de lectura y escritura? Es lo que busco.
Edito: Acabo de leer acerca de fstream, y creo que es lo que busco, lo inicializaría de esta manera:
fstream fs("test.txt", fstream::in | fstream::out);
Parece tener métodos de lectura y escritura, aun no lo he probado, ¿me lo recomendáis? ¿o hay algo mejor?.
La función debe de leer todo el archivo y luego sobrescribir unas líneas.
¡Saludos!.
Personalmente siempre he usado el método de C (La de la estructura FILE). Para mí es una manera muy sencilla de trabajar y nunca he tenido problemas usándolo. Por eso mismo, a riesgo de que sea peor (cosa que dudo), te recomiendo que sigas usando la estructura FILE. Si opinan lo contrario, no duden en argumentar!
Cita de: Seyro97 en 12 Agosto 2015, 21:10 PM
Personalmente siempre he usado el método de C (La de la estructura FILE). Para mí es una manera muy sencilla de trabajar y nunca he tenido problemas usándolo. Por eso mismo, a riesgo de que sea peor (cosa que dudo), te recomiendo que sigas usando la estructura FILE. Si opinan lo contrario, no duden en argumentar!
fstream es mejor para C++, por varias razones: para empezar, tiene la misma funcionalidad que FILE, pero más simple. Es una clase, que hereda de istream/ostream, con lo que puedes utilizar herencia.
Realmrnte son suficientes razones para usarlo si programas C++. Argumentos basados en costumbres de C, no sirven.
No conozco razón que haga fstream, ifstream u ofstream peores que FILE. ¿Conoces alguna?
Hola, la verdad siempre trabaje muy bien con FILE, pero eso quedo en C, además al compilar en C++ con file dice que no es muy seguro, salta una alerta y hay que añadir una directiva al preprocesador.
Dicho esto, estoy usando fstream y la verdad va muy bien, el único problema que tengo es como saber si el archivo existe o no, podría hacer fopen(archivo, "rt"), pero preferiría usar un método de fstream, pero al parecer no tiene.
¿A alguien se le ocurre que puedo hacer?, estoy probando con fstream.is_open(), es lo más parecido que hay, pero parece no funcionar.
Saludos.
O puedes utilizar
if(file.fail()) // error
Buenas socio, he probado con archivo.open() si devuelve false es que no lo pudo abrir, aunque quizás si exista, con fail() pasará lo mismo, o realmente dirá si existe o no? Me pregunto, gracias. De todas formas lo probare.
Saludos.
#include <iostream>
#include <fstream>
using namespace std;
int main(){
ifstream a("inexistent.txt");
cout << "fail " << a.fail() << endl;
cout << "good " << a.good() << endl;
cout << "is_open " << a.is_open() << endl;
cout << "operator bool " << (bool)a << endl;
}
Y la salida es la esperada:
Citarfail 1
good 0
is_open 0
operator bool 0
En caso de que exista:
Citarfail 0
good 1
is_open 1
operator bool 1
Okay gracias, está bastante aclarado. Supongo que solo comprueba si existe no hace nada de abrirlo o así, así que despues de la llamada a esa función en el caso de que sí exista no se encontrará abierto no?, de todas formas si llamo a close() tampoco habrá problemas, pero no creo que sea necesario.
Saludos ;D