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

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Pequeña duda sobre Archivos en C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Pequeña duda sobre Archivos en C  (Leído 2,166 veces)
theluigy13etv

Desconectado Desconectado

Mensajes: 179


Primero se hace, después se mejora


Ver Perfil
Pequeña duda sobre Archivos en C
« en: 30 Junio 2011, 06:18 am »

Respecto al modo de apertura de archivos en C tengo la siguiente duda:

Cuando abro un archivo con la instruccion: fopen("Empleados.txt","a+"), e leido que el modo de lectura a+ permite la lectura/escritura/añadidura.... Osea que si realizo la lectura, se realiza desde el inicio...y si seguidameente realizo la escritura lo hace al final??..osea ¿que el puntero del archivo se mueve del inicio y hace un salto al final??...y si vuelvo a leer...el puntero regresa al inicio??...o lee desde donde se quedo, osea desde el final???... :s  :( :( >:( Esto me marea...porfas alguien que me ayude...


Necesito aclarar esta duda urgente porque tengo un trabajo en donde necesito crear y llenar un archivo con un conjunto de numeros de tal manera que no se repita ninguno de ellos...por eso cada vez que ingreso un numero...debo leer el archivo desde el inicio al final y ver que el numero actual no coincida con ningun numero ingresado anteriormente...y si el numero no concide...recien puedo escribirlo en el archivo...para eso deberia abrir el archivo en modo lectura escritura que me permita añadir nuevos numero que no se repitan...el profe me dijo que lo hago en opcion a+...pero...no me funciona...el codigo es el siguiente...haber si me ayudan...


# include <iostream.h>
# include <conio.h>
# include <stdio.h>
# include <stdlib.h>

struct trabajador
{
   int cod;
};

int main()
{
   FILE *ftrabajador;
   struct trabajador f1;
   int codigo;
   char resp;


   do{
      clrscr();
      ftrabajador=fopen("Emplados.DAT","a+b");
      if(ftrabajador==NULL)
      {
         gotoxy(5,7); cout<<"Archivo no existe, sera creado";
         ftrabajador=fopen("Empleados.DAT","a+b");
      }

      gotoxy(5,5); cout<<"CODIGOS ";
      gotoxy(5,8); cout<<"Codi:"; cin>>codigo;
      fread(&f1,sizeof(f1),1,ftrabajador);
      while(!feof(ftrabajador))
      {
         if(codigo==f1.cod)
         {
            gotoxy(5,9); textcolor(LIGHTRED); cprintf("Ya esta registrado"); getche();
            return 0;
         }
         fread(&f1,sizeof(f1),1,ftrabajador);
      }
      f1.cod=codigo;
      fwrite(&f1,sizeof(f1),1,ftrabajador);
      fclose(ftrabajador);
      gotoxy(5,20); cout<<"Otra bez? "; cin>>resp;

   }while(resp=='s' || resp=='S');

   return 0;
}


Compilador: Borland C++ 5.02


« Última modificación: 30 Junio 2011, 06:22 am por theluigy13etv » En línea

leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: Pequeña duda sobre Archivos en C
« Respuesta #1 en: 30 Junio 2011, 06:55 am »

Puedes regresar el cursor al inicio con la función rewind(pf).

http://www.cplusplus.com/reference/clibrary/cstdio/rewind/

Por cierto, tu código tiene más de C que de C++ y no deberías mezclarlos.

Cambia la línea de iostream.h por
#include <iostream>


En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
PiroskY

Desconectado Desconectado

Mensajes: 76


пирожки


Ver Perfil
Re: Pequeña duda sobre Archivos en C
« Respuesta #2 en: 30 Junio 2011, 10:34 am »

Te doy unos consejos:
No confíes en donde debería estar el puntero

Si solo vas a leer información, abrí como rb
si vas a necesitar escribir, abrí como rb+

si queres leer desde el principio
fseek(puntero,0,seek_set)

si queres agregar algo
fseek(puntero,0,seek_end)

Por ultimo, yo me iría acostumbrando a la programación estructurada (no usar goto)

Btw: se escribe "vez"
En línea

Akai


Desconectado Desconectado

Mensajes: 823



Ver Perfil
Re: Pequeña duda sobre Archivos en C
« Respuesta #3 en: 30 Junio 2011, 11:53 am »


si vas a necesitar escribir, abrí como rb+


r+b pondría yo, El global a ti te puede parecer el mismo, a algunos compiladores NO (visual C++ entre otros)
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Pequeña duda sobre WMI
Programación Visual Basic
ŞCØRPIØN-X3 2 2,145 Último mensaje 13 Mayo 2011, 04:58 am
por ŞCØRPIØN-X3
Pequeña duda sobre un webbrowser
.NET (C#, VB.NET, ASP)
hackertotal22 0 1,573 Último mensaje 4 Julio 2011, 12:18 pm
por hackertotal22
Pequeña duda sobre ubuntu 11.04
GNU/Linux
Hack-11 4 3,296 Último mensaje 10 Enero 2012, 18:57 pm
por domge
Pequeña duda sobre netcat
Hacking
AlexPro 3 2,275 Último mensaje 28 Febrero 2012, 22:37 pm
por kub0x
¿Una duda pequeña en Java sobre los botones?
Java
theluigy13etv 1 1,851 Último mensaje 19 Octubre 2012, 05:12 am
por sapito169
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines