elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda los modos de apertura de archivos en C.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda los modos de apertura de archivos en C.  (Leído 5,369 veces)
theluigy13etv

Desconectado Desconectado

Mensajes: 179


Primero se hace, después se mejora


Ver Perfil
Ayuda los modos de apertura de archivos en C.
« en: 21 Diciembre 2011, 03:38 am »

Por más que leo miles de libros, tutoriales, videos en internet, no puedo entender del todo los modos de aperturas de archivos en C. Siempre llego a contradicciones o círculos viciosos. Aquí les pongo mis conclusiones al respecto, espero que me corrijan si estoy equivocado en algo.


Lo que quiero hacer es específicamente lo siguiente. Necesito hacer un programa que me permita almacenar en un archivo binario (trabajarlo siempre en modo secuencial), una lista de alumnos. Pero no una sola vez. Sino cada vez que abra el programa me permita, como simular la matrícula de uno, dos, tres, n..., alumnos (según lo que se necesite) de tal forma, que cada alumno tiene un código único. Si es que intento matricular un alumno con un código que ya ha sido registrado o matriculado anteriormente (osea que ya está guardado en el archivo). entonces el programa no me lo permita.

Bueno para eso, razono más o menos así. Primero, ingreso el código del nuevo alumno a matricular y lo almaceno en una variable auxiliar. Seguidamente abro el archivo en modo lectura  "rb" y empiezo a recorrer el archivo desde el principio hasta el final while!(feof(arch))  y ver si es que ya existe un código similar al q quiero agregar. SI es que no lo hay, cierro el archivo y lo vuelvo a abrir en el modo añadidura  "ab" para escribir añadir ese nuevo alumno al final de mi archivo.

Bueno, utilizando ambos modos, creo que me fue bien. Pero mi profesor utiliza el modo "a+b" para hacerlo sin necesidad de usar los dos modos anteriores que yo usé.

Según la teoría dice lo siguiente respecto al modo "a+b": " Abre el archivo para modificar (escribir/leer) al final. Si no existe el archivo, funciona igual que w+"
Duda: ¿Si es que me sitúa al final. Qué sentido tiene leer al final?, si al final no hay nada¿¿¿??..para leer tengo que estar al inicio??? Si tiene sentido escribir al final, pero leer al final???

Bueno, lo que hice fue intentar con este modo "a+b" y como arte de magia me funciona sin necesidad de usar "rb" y "wb". Pero , usando este modo, como que me mareo y no entiendo lo que ocurre con el archivo. Osea, funciona, pero no entiendo como funciona. Porque pareciera que con este modo "a+b", cuando leo, la lectura lo hace desde el el inicio al final y cuando escribio, la escritura lo hace al final sin sobreescribir datos almacenados en el archivo, como que funciona inteligentemente. Estoy en una gran duda. Ayudaaaaaaaaaaaaaa :o


Ojo, no pido que me resuelvan el programa, sino que me orienten sobre como funciona el modo de apertura "a+b" bajo cualquier circunstancia. Existe archivo, no existe, tiene elementos, no tiene. Porque la teoría que encontré en todas mis búsquedas no explican ampliamente estos modos.

Y para que vean que es verdad lo que les digo, que si he buscado información la respecto, aquí mis conclusiones sobre los modos que si he llegado a entender:

* MODO rb

Con este modo permite leer todos los elementos del archivo porque al abrirse siempre se va a

situar en el primer elemento. Si no existiera el archivo me devuelve NULL y el archivo ni se crea ni

se abre.

* MODO wb

CHANCAR, ESCRIBIR DESDE EL INICIO. Con este modo me permite escribir datos en el archivo,

mediante fwrite. Cada fwrite escribe en una posicion consecutiva a la anterior. Si ya había

anteriormente un archivo, estos son sobreescritos. Sino existe el archivo, este es creado y dejado

abierto listo para llenarlo.

* Modo ab

AÑADIR AL FINAL, NO LEER. Si no existe el archivo, entocnes lo crea y lo abre y permite escribir

datos desde el comienzo. Si es que ya existe el archivo y tiene elementos, Permite escribir datos

a partir del final, es decir, permite añadir. CONCLUSIÓN: Siempre que quiero añadir datos en un

archivo, exista o no este sin temor a perder datos si ya existiese, se usa ab. Siempre añadirá

datos la final  y si no hubiera datos, los añade desde el principio. (IDÓNEO PARA AÑADIR AL

FINAL, no leer)

* Utilizando rb y ab

Con rb, recorro el archivo (DE INICIO A FIN) para ver si algún elemento del archivo tiene el mismo

codigo que el nunevo elemento qeu quiero guardar. Si es que ya existe una rchivo con el mismo

elemento, entonces no lo añado y me salgo con "return".

Si luego de recorrer todo el archivo, veo que no hay repeticion entre un elemento guardado y el

nuevo que quieor añadir, entonces cierro el archivo dle modo lectura y lo abro en el modo ab

para añadir el nuevo dato al final y así esté guardado consecutivamente al anterior.



Y para el modo "a+b" también me hice una conclusión, pero no estoy seguro sí es la correcta, porque me funciona de una manera que como que no encaja con la teoría...Aquí mi conclusión (espero cualquier correción al respecto)

* Modo a+b

La teoría dice:
"Si el archivo no existe, permite crearlo. EL cabezal de lectura/escritura se sitúa al final de

fichero".
"Abre el archivo para modificar. (Escribir y leer) al final. Si no existe el archivo, funciona con w+"
Pero según lo que He practicado. Funciona como una mezcla de rb y ab. Osea que me permite

leer el archivo desde un principio y permite añadir datos al final (o desde un inicio si está vacío).

Idóneo para llenar una archivo con elementos únicos, por ejemplo, que cada elemento tenga un código o un número que lo identifique único como número de identificación, etc.






« Última modificación: 21 Diciembre 2011, 03:43 am por theluigy13etv » En línea

naderST


Desconectado Desconectado

Mensajes: 625



Ver Perfil WWW
Re: Ayuda los modos de apertura de archivos en C.
« Respuesta #1 en: 21 Diciembre 2011, 05:47 am »

No sabía que era valido usar a+b, pero bueno en fin lo que pasa que el modo a+ no es que se posiciona al final al abrir el archivo, sino que al momento de hacer cualquier operación de escritura este se sitúa al final, pero al momento de la apertura el está posicionado al inicio del archivo.

Si lees bien la teoría:

"a+"
Open a file for reading and appending. All writing operations are performed at the end of the file, protecting the previous content to be overwritten. You can reposition the internal pointer to anywhere in the file for reading, but writing operations will move it back to the end of file. The file is created if it does not exist.


En línea

theluigy13etv

Desconectado Desconectado

Mensajes: 179


Primero se hace, después se mejora


Ver Perfil
Re: Ayuda los modos de apertura de archivos en C.
« Respuesta #2 en: 21 Diciembre 2011, 14:00 pm »

Si pues....el profe manipula archivos secuenciales incluso usando el modo de apertura "a+". Eso me parecía raro en incorrecto, porque siendo estrictos, para archivos secuenciales se utiliza: "r", "w", "a" y para archivos de acceso directo: "r+", "w+", "a+".

Según lo que me dices, concluyo que con "a+" al abrir el archivo se sitúa al inicio. Si leo, lo hará desde el inicio, pero si escribo al hará al final. Ahora, el problema creo que surgiría si es que luego de una escritura (al final), se me ocurre leer.. donde se sitúa el cabezal de lectura?¿ Vuelve al inicio, o se sitúa en el elemento posterior a la escritura realizada anteriormente.
En línea

theluigy13etv

Desconectado Desconectado

Mensajes: 179


Primero se hace, después se mejora


Ver Perfil
Re: Ayuda los modos de apertura de archivos en C.
« Respuesta #3 en: 21 Diciembre 2011, 14:03 pm »

Aunque, creo que este modo no causaría problemas si es que lo usamos netamente en archivos de acceso directo... Que ganas del profe de complicarnos la vida!!!
En línea

naderST


Desconectado Desconectado

Mensajes: 625



Ver Perfil WWW
Re: Ayuda los modos de apertura de archivos en C.
« Respuesta #4 en: 21 Diciembre 2011, 19:00 pm »

Al escribir se sitúa al final y cuando vayas a leer estarás en el final. Este tipo de dudas las puedes resolver con tu buen amigo el compilador  :xD. Bueno pero si es con archivos de acceso directo te olvidas de este problema.
En línea

theluigy13etv

Desconectado Desconectado

Mensajes: 179


Primero se hace, después se mejora


Ver Perfil
Re: Ayuda los modos de apertura de archivos en C.
« Respuesta #5 en: 23 Diciembre 2011, 15:08 pm »

AYUDA NUEVAMENTEEEEEEEEE!!!!

E estado leyendo el Libro Aprendiendo C en 21 días y en el modo de apertura de archivos encontré lo siguiente

"r+" : Abre el archivo para lectura y escritura. Si el archivo del nombre especificado no existe, es creado. Si el archivo existe se añaden nuevos datos al inicio del archivo, sobreescribiendo los datos existentes.

DUDA: mmm Osea que si el archivo no existe, cuando intento abrir el archivo con fopen("nombre","r+b"), se crea de todas manera un archivo y el sistema operativo me devuelve el puntero a una estructura tipo FILE para poder manipular el archivo.. Pero intenté hacer esto, y me di cuenta que no es así, que no puede abrir un archivo si no existe. [/font][/b]

En el libro de Como programar en C de Deithel:

"r+" Abrir un archivo para actualizar (Leer y escribir).. ¿En dónde?

"w+" Crea un archivo para actulizar. Si el archivo ya existe, se descarta el contenido actual Esto no es actualizar, esto es borrar y comenzar de nuevo

"a+" Agregar, abrir o crear un archivo para actualizar, la escritura se efectúa al final del archivo.

¿Cuál de los modos me recomiendan cuando quiero modificar el nombre de una persona, que se encuentra dentro de una lista de nombres en un archivo, si es que no conozco su posición en el archivo, si solo conozco su código?
En línea

Sagrini

Desconectado Desconectado

Mensajes: 107


Ver Perfil WWW
Re: Ayuda los modos de apertura de archivos en C.
« Respuesta #6 en: 23 Diciembre 2011, 16:28 pm »

Easy. Si abres un fichero con "r" y escribes, te da segmentation fault.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
¿Como optimizar la apertura de archivos en Binario?
Programación Visual Basic
tkows 7 1,481 Último mensaje 4 Enero 2008, 13:16 pm
por tkows
Duda fopen() y modos de apertura
Programación C/C++
cgvwzq 8 5,809 Último mensaje 7 Mayo 2010, 00:25 am
por Littlehorse
Apertura Archivos JPG
Programación C/C++
W0lFy 0 1,072 Último mensaje 19 Mayo 2010, 07:56 am
por W0lFy
Problema en apertura de archivos en Borland C++
Programación C/C++
Enagymo 3 3,082 Último mensaje 1 Agosto 2010, 03:42 am
por MIG80
[C][?] Problema apertura de archivos
Programación C/C++
Oblivi0n 3 1,493 Último mensaje 1 Marzo 2011, 12:39 pm
por Garfield07
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines