C/Visual C - clases y archivos

 
Vista:

clases y archivos

Publicado por abi (54 intervenciones) el 07/06/2003 02:38:02
hola! tengo una duda, me dijeron que para guardar un archivo en C necesitaba una estructura y luego para guardar usaba la función fwrite, mi duda es la siguiente:
En c++ se usan clases, y mi duda es como le hago para guardar información en un archivo usando claes, es igual que en C, con las funciones de fwite, fread.
Y otra duda, como le hago para guardar una lista enlazada y que al momento de querer abrir el archivo la lista este enlazada, y que si realizo una inserción en un nodo intermedio de la lista , ¿como se haría en un archivo?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:clases y archivos

Publicado por chuidiang (677 intervenciones) el 07/06/2003 06:35:34
Lo que tienes en C es válido para C++. Sigues podiendo escribir estructuras con fwrite().

Sin embargo, para C++ sería más elegante usar las clases que te proporciona C++ y las tuyas propias. Con la clase fstream (o alguna del conjunto, pues hay varias similares finputstream foutputstream, etc) puedes escribir en un fichero. Para escribir una clase tuya, deberías sobrecargar un operador << global. De esta forma, podrás escribir en fichero igual que en pantalla:

/* Sobrecarga del operador. No te fies de la sintaxis que no recuedo exactamente. El sólo la idea, tendrás que trabajartela un poco */

fstream &operator << (fstream &fichero, MiClase &miClase)
{
fichero << miClase.getAtributo1();
fichero << miClase.getAtributo2 ();
...
}

/* y como usarlo, muy similar al cout */
cout << "un texto";
fstream << miClase;

Para la lista tienes que escribir los datos de la misma en un fichero en el orden que tú quieras. Luego leerlos en el mismo orden y reconstruyendo la lista (insertando los datos que vas leyendo en una lista vacía).

En cuanto a añadir elementos al fichero, la solución fácil consiste en reescribir el fichero entero. Es decir, cargas el fichero en memoria, insertas más datos en la lista, borras el fichero y lo escribes entero con más datos.

Se bueno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:clases y archivos

Publicado por abi (54 intervenciones) el 09/06/2003 01:03:40
Hola! creo que no entendiste mi pregunta, claro que se que lo que uso en C se puede usar en C++ si no soy una mensa, claro que se es mejor usar clases que estructuras y conozco eso de fstream, claro que se sobrecargar un operador, a lo que me referia era que si puedo usar las funciones fwrite, y fread para guardar una clase de la misma manera que guardo una estructura, si entiendes mi duda o te explico mejor?, y sobre la lista yo preguntaba que si había alguna forma de insertar un nodo intermedio en una lista sin tener que volver a copiar la lista, porque eso se me había ocurrido a mi lo que yo quiero es insertar un nodo intermedio sin tener que volver a copiar la lista porque porque si no se puede entonces se perdería el concepto de lista enlazada. Y sería muy tardado dar una alta de un nodo intermedio
Espero que le entiendas a mis dudas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:clases y archivos

Publicado por chuidiang (677 intervenciones) el 09/06/2003 10:49:49
Perdón por no haber entendido.

Si utilizas fwrite o fread para escribir o leer una clase puede que te funcione o no en función de la clase. Para clases sencillas que tengan sólo atributos simples y algunos métodos es posible que funcione. Si utilizas clases con herencias, métodos estáticos, con punteros dentro (a otras clases o de arrays dinámicos), tienes bastantes probabilidades de que no te funcione. En cualquier caso, no es la forma correcta de hacerlo.

En cuanto a la lista, en memoria sí puedes insertar todos los nodos que quieras donde quieras. En un fichero no es posible (sin meterse a bajo nivel), insertar información nueva entre medias de lo que ya hay.

Se bueno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar