Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Kaxperday en 11 Agosto 2015, 22:04 pm



Título: Mejor clase para trabajar con archivos C++
Publicado por: Kaxperday en 11 Agosto 2015, 22:04 pm
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:

Código:
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!.


Título: Re: Mejor clase para trabajar con archivos C++
Publicado por: 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!


Título: Re: Mejor clase para trabajar con archivos C++
Publicado por: ivancea96 en 12 Agosto 2015, 22:33 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?


Título: Re: Mejor clase para trabajar con archivos C++
Publicado por: Kaxperday en 13 Agosto 2015, 00:12 am
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.


Título: Re: Mejor clase para trabajar con archivos C++
Publicado por: ivancea96 en 13 Agosto 2015, 12:59 pm
O puedes utilizar
Código
  1. if(file.fail()) // error


Título: Re: Mejor clase para trabajar con archivos C++
Publicado por: Kaxperday en 14 Agosto 2015, 15:22 pm
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.


Título: Re: Mejor clase para trabajar con archivos C++
Publicado por: ivancea96 en 14 Agosto 2015, 15:40 pm
Código
  1. #include <iostream>
  2. #include <fstream>
  3.  
  4. using namespace std;
  5.  
  6. int main(){
  7.    ifstream a("inexistent.txt");
  8.    cout << "fail " << a.fail() << endl;
  9.    cout << "good " << a.good() << endl;
  10.    cout << "is_open " << a.is_open() << endl;
  11.    cout << "operator bool " << (bool)a << endl;
  12. }

Y la salida es la esperada:

Citar
fail 1
good 0
is_open 0
operator bool 0

En caso de que exista:
Citar
fail 0
good 1
is_open 1
operator bool 1


Título: Re: Mejor clase para trabajar con archivos C++
Publicado por: Kaxperday en 14 Agosto 2015, 16:26 pm
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