tal vez es una burrada lo que pongo pero es gratis :-)<br><div>básicamente lo que queres hacer es serializar y desserializar una estrucutra (o varias)</div><div>lo que podes hacer es pasa el puntero a void pero dentro castealo a byte (unsigned char) y lito</div>
<div>y lo mismo para leerlo pasa un puntero a void que apunta a la estructura y lees bytes que se meten dentro de la estructura en el mismo orden que fueron sacados.</div><div><br>David</div><div><br><div class="gmail_quote">
El 19 de octubre de 2009 15:57, Rubén Calabuig <span dir="ltr"><<a href="mailto:racalabuig@gmail.com">racalabuig@gmail.com</a>></span> escribió:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Gracias por contestar:<br>
<br>
Estoy programando en C++.<br>
<br>
El problema es que no entiendo cómo utilizar las templates en este<br>
caso.<br>
<br>
El método en cuestión es el siguiente:<br>
<br>
//========================================================================<br>
// METODO : bool guardarRegistro(void* reg, int tam)<br>
// ACCION : Graba un registro en el archivo.<br>
// PARAMETROS: void* reg --> puntero a la estructura del registro.<br>
// int tam --> tamano en bytes de la estructura.<br>
// RETORNO : true = exito / false = fracaso.<br>
//........................................................................<br>
// EJEMPLO :<br>
// if(archivo1.guardarRegistro(alumno, sizeof(alumno)))<br>
// {<br>
// cout << "registro grabado con exito" << endl;<br>
// }<br>
// else<br>
// {<br>
// cout << "no pido guardarse el registro" << endl;<br>
// }<br>
//------------------------------------------------------------------------<br>
<br>
bool clsArchivo::guardarRegistro(void* reg, int tam)<br>
{<br>
switch(estado)<br>
{<br>
case CREADO : arch = fopen(nombre,"ab");<br>
write(reg,tam,1,arch);<br>
fclose(arch);<br>
return true;<br>
break:<br>
<br>
case AGREGAR :<br>
case MODIFICAR: fwrite(reg,tam,,1,arch);<br>
return true;<br>
break:<br>
<br>
default : return false;<br>
}<br>
}<br>
//===== FIN METODO =====================================================<br>
<br>
¿pdrías darme una mano?<br>
<br>
<br>
El lun, 19-10-2009 a las 10:46 -0300, David Fire escribió:<br>
<div><div></div><div class="h5">> hola<br>
> es C o C++?<br>
> si es C++ proba con templates<br>
> aparte que error te da?<br>
> David<br>
><br>
> El 19 de octubre de 2009 09:28, Rubén Calabuig <<a href="mailto:racalabuig@gmail.com">racalabuig@gmail.com</a>><br>
> escribió:<br>
> Hola a todos:<br>
><br>
> Estoy haciendo una clase, "clsArchivo", para instanciar<br>
> objetos con<br>
> archivos binarios asociados.<br>
><br>
> La clase tiene tres atributos<br>
> FILE* arch; // puntero a una estructura FILE.<br>
> char* nombre; // puntero a una cadena generada<br>
> dinamicamente para<br>
> // contener el nombre del archivo en disco.<br>
> tEstado estado; // estado actual del archivo<br>
><br>
> NOTA: tEstado es una enumeracion declarada de la siguiente<br>
> forma:<br>
><br>
> enum tEstado{DESASIGNADO,INDETERMINADO,INEXISTENTE,<br>
> CREADO,LEER,AGREGAR,MODIFICAR,CERRADO};<br>
><br>
><br>
> Tods los métodos de acción sobre el archivo asociado,<br>
> funcionan a la<br>
> perfección, pero el problema se plantea cuando intento<br>
> desarrollar<br>
> métodos, que reciban como parámetros a estructuras que deben<br>
> ser<br>
> escritas o leidas.<br>
><br>
> No puedo pasar un formato específico de estructura, ya que si<br>
> así lo<br>
> hiciera, mi clase no sería generérica. Entonces, pensé en<br>
> utilizar<br>
> punteros de tipo void pero no les encuentro la vuelta, de<br>
> cualquier<br>
> forma que los escriba, me dan error.<br>
><br>
> Aclaro que estoy programando en el IDE Code::Blocks con el<br>
> compilador<br>
> gcc, tanto para entorno Windows como par Linux.<br>
><br>
> Un ejemplo de prototipo sería el siguiente:<br>
><br>
> tEstado clsArchivo::guardarRegistro(void* reg, int tam)<br>
><br>
> Donde:<br>
> void* reg --> es el puntero a la estructura.<br>
> int tam --> es el tamaño de la estructura.<br>
><br>
> La pregunta concreta es cómo debe ser la función fwrite o<br>
> fread, yo<br>
> intenté lo siguiente:<br>
><br>
> fread(reg,tam,1,arch)<br>
><br>
> Pero me da error.<br>
><br>
> Desde ya muchas gracias.<br>
><br>
><br>
> --<br>
> Rubén Alberto Calabuig<br>
><br>
><br>
><br>
> _______________________________________________<br>
> Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net">Cconclase@listas.conclase.net</a><br>
> <a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>
> Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" target="_blank">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a><br>
><br>
><br>
><br>
> --<br>
> (\__/)<br>
> (='.'=)This is Bunny. Copy and paste bunny into your<br>
> (")_(")signature to help him gain world domination.<br>
><br>
> _______________________________________________<br>
> Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net">Cconclase@listas.conclase.net</a><br>
> <a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>
> Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" target="_blank">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a><br>
--<br>
Rubén Alberto Calabuig<br>
<br>
<br>
<br>
_______________________________________________<br>
Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net">Cconclase@listas.conclase.net</a><br>
<a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>
Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" target="_blank">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a><br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br> (\__/) <br>(='.'=)This is Bunny. Copy and paste bunny into your <br>(")_(")signature to help him gain world domination. <br><br>
</div>