Título: Problema para pasar una lista a fichero con Fwrite Publicado por: samur88 en 18 Febrero 2011, 02:30 am Saludos.
Tengo el siguiente problema, quiero pasar una lista a un fichero, la lista tiene datos que yo previamente le he introducido y los he mostrado para verificar que los datos son correctos, el caso es que cuando intento pasar dicha lista un fichero de la siguiente forma con fwrite, solo me mete basura en el fichero. Dejo el código a ver si podéis ayudarme: Esta es la estructura de la lista: Código
Esta es la función que uso para escribir en el fichero a la cual le paso un puntero por referencia al primer elemento de la lista: Código
Un saludo, espero que podáis ayudarme. Título: Re: Problema para pasar una lista a fichero con Fwrite Publicado por: _*p en 18 Febrero 2011, 02:53 am Por lo que veo, está bien a simple vista... ¿Tienes una función para leer el .txt? Si lees con un editor de textos debería darte "basura" ya que es un binario...
Título: Re: Problema para pasar una lista a fichero con Fwrite Publicado por: samur88 en 18 Febrero 2011, 13:05 pm Muchas gracias por la respuesta.
Tengo una función para leerlo, lo siento se me olvido adjuntarla, la pongo aqui, pero me da fallos, igual es la función la que esta mal: Código
Título: Re: Problema para pasar una lista a fichero con Fwrite Publicado por: _*p en 18 Febrero 2011, 13:57 pm Es lo mismo leer un .txt que un .dat desde c?
Una pregunta... estás reservando la memoria para leer bloques de código? Título: Re: Problema para pasar una lista a fichero con Fwrite Publicado por: samur88 en 18 Febrero 2011, 14:05 pm Discúlpame, es que al ser un archivo binario decidí guardarlo en un .dat en vez de un .txt en teoría es lo mismo, así que supongo no habría problemas por eso.
En la estructura tengo datos insertados, los he comprado mostrándolo por pantalla, luego la función que tengo para guardar la estructura en el fichero es la que puse anteriormente y función que tengo para cargar los datos del fichero en la estructura es esa que puse ahora. ¿Tengo que reservar memoria para guardar los datos del archivo en la lista? Un saludo y muchas gracias. Título: Re: Problema para pasar una lista a fichero con Fwrite Publicado por: samur88 en 18 Febrero 2011, 14:10 pm Disculpa, me olvide de decir que efectivamente si reservo memoria para la lista almacenada en el fichero a la hora de leer.
Ya que la lectura la hago desde otro programa, en el que tengo una estructura exactamente igual a la estructura del primero (programa que graba la lista en el fichero). Título: Re: Problema para pasar una lista a fichero con Fwrite Publicado por: _*p en 18 Febrero 2011, 16:06 pm Tal vez te sirva esto ;)
Código
Código: ./listas Título: Re: Problema para pasar una lista a fichero con Fwrite Publicado por: samur88 en 19 Febrero 2011, 14:46 pm Muchisimas gracías por mostrarme la forma de escribir y leer correctamente con el archivo, solo una duda que tengo al respecto, es sobre mi forma de definir el trabajo con listas.
Tu defines dos nuevos tipo de datos que son en realidad dos punteros a la misma lista o mejor dicho defines la forma de trabajar con dos listas diferentes pero con la misma estructura de datos: Código
El caso es que yo eso lo hago de la siguiente forma: Código
pero no consigo adaptar esas funciones y que el programa no de fallo de segmentación a la forma en la que lo hago, si me puedes indicar que hago mal lo agradecería mucho. Lo siento, solucionado, fue un descuido, si puedes responderme a lo otro, lo agradecería mucho >:D Disculpa otra duda que tendría sería, si quiero leer todos los nodos de la lista, lo hago de esta forma en el codigo que me has pasado pero no me funciona correctamente, el bucle se ejecuta no leyendo todos los nodos almacenados y luego el programa se cierra automáticamente: Código
Un saludo y gracias de nuevo. Título: Re: Problema para pasar una lista a fichero con Fwrite Publicado por: Ferno en 19 Febrero 2011, 17:54 pm Disculpa otra duda que tendría sería, si quiero leer todos los nodos de la lista, lo hago de esta forma en el codigo que me has pasado pero no me funciona correctamente, el bucle se ejecuta no leyendo todos los nodos almacenados y luego el programa se cierra automáticamente: Código
Un saludo y gracias de nuevo. Que alguien me corrija si me equivoco, pero estoy seguro que debes abrir el archivo antes de corroborar que no ha llegado a su fin (usar fopen antes de feof). Además debes sacarlo del bucle, sino estarías abriendo el archivo constantemente (si es que funciona!!). Título: Re: Problema para pasar una lista a fichero con Fwrite Publicado por: samur88 en 19 Febrero 2011, 18:24 pm Lo siento fermo jeje es tal y como dices, me dolía bastante la cabeza y tuve ese descuido y no sabía muy bien por que era, luego lo arregle y corregí el post que puse preguntando esa duda.
La única duda que tengo ahora mismo a la hora de insertar y leer desde el archivo es como puedo hacerlo usando punteros locales a la función main, sin definir nuevos tipos de datos que sean punteros a la propia estructura ya de por si, lo he intentado pero siempre me da fallos. Un saludo y gracias por la corrección. Título: Re: Problema para pasar una lista a fichero con Fwrite Publicado por: samur88 en 19 Febrero 2011, 18:55 pm Fbin he estado haciendo pruebas con el codigo que me pusiste, pero he notado algunos fallos, supuestamente el fichero es independiente de la estructura, pero el caso es que si borro la estructura y luego leo el fichero me da lo que supuestamente tendría que ser dni, etc.. posiciones de memoría extrañas, no debería a ver problema si borrara la lista y luego leyese la estructura ¿no?, también he probado leyendo el archivo desde un programa externo y me da el mismo error, me lee y me da muchos números, adjunto el programa desde el cual he leido el fichero:
Código
Un saludo. Título: Re: Problema para pasar una lista a fichero con Fwrite Publicado por: .:BlackCoder:. en 20 Febrero 2011, 03:19 am Creo que debes asignarle memoria a aux en tu funcion...
Saludos... Título: Re: Problema para pasar una lista a fichero con Fwrite Publicado por: samur88 en 21 Febrero 2011, 01:06 am Muchas gracias, al final me di cuenta de que la función fwrite y fread no reciben un puntero a una estructura si no una estructura en si, de esta forma los datos se almacenan en dicha estructura, ese era mi problema, usando un estructura auxiliar para leer los datos con fread lo he conseguido sin problemas.
Un saludo. |