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

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


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


Desconectado Desconectado

Mensajes: 389


Ver Perfil
Archivos
« en: 28 Agosto 2013, 21:16 pm »

Saludos

Tengo que hacer un  programa que copie todos los caracteres de un archivo fuente a uno destino, ya he creado el archivo fuente (el que contiene los caracteres), y ya lo pude abrir, el problema es que no se muy bien como manejar archivos y como hacer que me recorra toda la linea de caracteres y copiarlos en otro archivo.

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main()
  5. {
  6.    FILE *p;
  7.    p = fopen("F:\\archivo.txt","r");
  8.    if(p!=NULL)
  9.       printf("Si se pudo abrir el archivo\n");
  10.    else
  11.    {
  12.        printf("No se pudo abrir el archivo\n");
  13.        exit(1);
  14.    }
  15.    return 0;
  16. }

no les pido que me muestren el codigo, solo que me den una idea de como hacerlo

gracias


En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Archivos
« Respuesta #1 en: 28 Agosto 2013, 21:28 pm »

Tutoriales en internet al respecto tienes a patadas.

Pon en google "tutorial manejo ficheros c" y tendrás resultados de sobra.

Explicártelo a ti en exclusiva es como reinventarse la rueda... Ya esta echo en otro sitio... Es mas cómodo que visites el sitio  :P


En línea

m@o_614


Desconectado Desconectado

Mensajes: 389


Ver Perfil
Re: Archivos
« Respuesta #2 en: 29 Agosto 2013, 02:33 am »

ya revise algunos tutoriales y me resolvio muchas dudas, el codigo por ahora lo tengo asi:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main()
  5. {
  6.    FILE *fd;
  7.    int ad;
  8.    ad = creat("F:\\archivo_destino.txt",755);
  9.    if((fd = fopen("F:\\archivo_fuente.txt","r"))!=NULL)
  10.    {
  11.        while(read(fd,ad,1)!=NULL)
  12.            write(1,ad,1);
  13.    }
  14.    else
  15.    {
  16.        printf("No se pudo abrir el archivo\n");
  17.        exit(1);
  18.    }
  19.    close(fd);
  20.    return 0;
  21. }

primero ya que tengo mi archivo con una cadena de caracteres, tengo que pasarlas a otro archivo, y es ahi donde no se que hacer, si crear el archivo destino(a donde voy a copiar los caracteres), de esta manera:

Código
  1.  
  2. int ad;
  3. ad = creat("F:\\archivo_destino.txt",755);
  4.  

y pasarle ad a la funcion read

Código
  1. while(read(fd,ad,1)!=NULL)

o crear un array tipo char para ahi almacenar la cadena del archivo fuente

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main()
  5. {
  6.    FILE *fd;
  7.    char cad[40];
  8.    if((fd = fopen("F:\\archivo_fuente.txt","r"))!=NULL)
  9.    {
  10.        while(read(fd,cad,1)!=NULL)
  11.            write(1,cad,1);
  12.    }
  13.    else
  14.    {
  15.        printf("No se pudo abrir el archivo\n");
  16.        exit(1);
  17.    }
  18.    close(fd);
  19.    return 0;
  20. }
« Última modificación: 29 Agosto 2013, 02:38 am por m@o_614 » En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Archivos
« Respuesta #3 en: 29 Agosto 2013, 04:00 am »

Si no tienes un libro de calidad sobre C deberías conseguir uno, por ejemplo "The C Programming Language", en el se trata el tema de copia de archivos (utilizando la entrada y salida estándar) en el primer capitulo.

Un problema con tu programa es verificar si la función read (parte del estándar POSIX) retorna NULL para indicar error (en esa situación la función retorna -1).

Es mas fácil realizar esa operacion utilizando la biblioteca estándar de C, con ella solo tienes que abrir los archivos con fopen y a continuación utilizar un bucle donde lees un carácter de la entrada y lo envías a la salida. Mas o menos así:
Código
  1. FILE *entrada;
  2. FILE *salida;
  3. int ch;
  4.  
  5. /* Apertura de archivos */
  6.  
  7. /* Procesamos todos los caracteres */
  8. while ((ch = fgetc(entrada)) != EOF)
  9.   fputc(ch, salida);
  10.  
  11. /* Cierre de archivos */
  12.  
  13. /* etc */

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
m@o_614


Desconectado Desconectado

Mensajes: 389


Ver Perfil
Re: Archivos
« Respuesta #4 en: 29 Agosto 2013, 21:35 pm »

saludos rir3760 todavia no he conseguido el libro pero si encontre algunos tutoriales, si es mas rapida la manera en la que tu lo hiciste pero primero tengo que empezar a trabajar con las funciones basicas, read(), open(), write, etc..

Ahora en este codigo con el fopen(), creo y a la vez abro un archivo.txt para ahi escribir la cadena hola mundo, pero por alguna razon solamente me crea el archivo pero no me escribe la cadena en el archivo.txt

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4.  
  5. int main()
  6. {
  7.    FILE *fd;
  8.    if((fd = fopen("F:\\archivo_fuente.txt","w"))!=NULL)
  9.        write(fd,"hola mundo",10);
  10.    else
  11.    {
  12.        printf("No se pudo crear el archivo\n");
  13.        exit(1);
  14.    }
  15.    return 0;
  16. }
  17.  

gracias
En línea

Stereo

Desconectado Desconectado

Mensajes: 25


Ver Perfil
Re: Archivos
« Respuesta #5 en: 29 Agosto 2013, 21:50 pm »

Haz un while !feof, usa fgets para obtener los carácteres de cada línea, usa fprintf para escribir en un archivo y termina con fclose para evitar bugs.
En línea

m@o_614


Desconectado Desconectado

Mensajes: 389


Ver Perfil
Re: Archivos
« Respuesta #6 en: 30 Agosto 2013, 00:10 am »

saludos ahora ya por fin ya me escribe hola mundo en el archivo.txt, pero el fopen lo tuve que cambiar por un simple open, y el problema es que con el fopen yo podia crear el archivo y abrirlo al mismo tiempo, y con el open no puedo, el archivo tiene que existir de antemano para poder abrirlo

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4.  
  5. int main()
  6. {
  7.    int fd;
  8.    if((fd = open("F:\\archivo_fuente.txt",1))>0)
  9.        write(fd,"hola mundo",10);
  10.    else
  11.    {
  12.        printf("No se pudo crear el archivo\n");
  13.        exit(1);
  14.    }
  15.    return 0;
  16. }

eso es lo que no entiendo, por que con fopen() no me escribe en el archivo y con open si???

gracias
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Archivos
« Respuesta #7 en: 30 Agosto 2013, 04:22 am »

lo que no entiendo, por que con fopen() no me escribe en el archivo y con open si?
Porque estas mezclando funciones del estándar POSIX (open y write) con funciones del estándar ISO (fopen).

En el caso de write su primer argumento es el descriptor de archivo y es de tipo int, no puedes pasar el valor de retorno de fopen porque este es de tipo "FILE *".

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
m@o_614


Desconectado Desconectado

Mensajes: 389


Ver Perfil
Re: Archivos
« Respuesta #8 en: 30 Agosto 2013, 15:29 pm »

Muchas gracias, una ultima pregunta

No hay alguna manera de que se pueda utilizar el fopen y pasar su puntero tipo *FILE a la funcion write();???? aunque sean de estandares diferentes


EI: juntando mensajes.

ya!! ya consegui que me compilara correctamente, lo unico que hice fue cambiar el write() por el fwrite() y ponerle los parametros adecuados

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4.  
  5. int main()
  6. {
  7.    FILE *fd;
  8.    char cad[]={"Hola mundo"},*ptr;
  9.    ptr = cad;
  10.    if((fd = fopen("F:\\archivo_fuente.txt","w"))!=NULL)
  11.        fwrite(ptr,1,10,fd);
  12.    else
  13.    {
  14.        printf("No se pudo abrir el archivo\n");
  15.        exit(1);
  16.    }
  17.    return 0;
  18. }
  19.  
« Última modificación: 31 Agosto 2013, 08:52 am por Eternal Idol » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines