Autor
|
Tema: Mejor clase para trabajar con archivos C++ (Leído 4,046 veces)
|
Kaxperday
Desconectado
Mensajes: 702
The man in the Middle
|
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!.
|
|
|
En línea
|
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
|
|
|
Seyro97
|
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!
|
|
|
En línea
|
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
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?
|
|
|
En línea
|
|
|
|
Kaxperday
Desconectado
Mensajes: 702
The man in the Middle
|
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.
|
|
|
En línea
|
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
O puedes utilizar if(file.fail()) // error
|
|
|
En línea
|
|
|
|
Kaxperday
Desconectado
Mensajes: 702
The man in the Middle
|
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.
|
|
|
En línea
|
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
#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: fail 1 good 0 is_open 0 operator bool 0 En caso de que exista: fail 0 good 1 is_open 1 operator bool 1
|
|
|
En línea
|
|
|
|
Kaxperday
Desconectado
Mensajes: 702
The man in the Middle
|
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
|
|
|
En línea
|
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Microsoft es elegida la mejor empresa para trabajar del mundo
Noticias
|
wolfbcn
|
2
|
2,531
|
1 Noviembre 2011, 09:56 am
por crazykenny
|
|
|
¿Hay un mejor entorno que el Workbench para trabajar con MySQL?
Bases de Datos
|
Aikanáro Anário
|
0
|
2,581
|
1 Abril 2012, 00:43 am
por Aikanáro Anário
|
|
|
cual es la mejor clase de java para trabajar con archivos
Java
|
jhonatanAsm
|
9
|
6,624
|
17 Mayo 2012, 04:10 am
por RyogiShiki
|
|
|
Clase para Escribir en Archivos
Java
|
Nasty35
|
0
|
1,583
|
4 Octubre 2012, 21:13 pm
por Nasty35
|
|
|
Plantilla para trabajar con archivos en lenguaje C.
« 1 2 »
Programación C/C++
|
NOB2014
|
10
|
5,168
|
29 Abril 2017, 18:14 pm
por NOB2014
|
|