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

 

 


Tema destacado: Estamos en la red social de Mastodon


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

Desconectado Desconectado

Mensajes: 155


Ver Perfil
Ayuda con un divisor de archivos
« en: 29 Marzo 2015, 01:08 am »

Por favor requiero su ayuda para poder terminar este código, es similar al hacha, divide los archivos en 100 bytes pero no funciona como quiero que funcione, tengo pensado pasarlo a C++ por completo.
Código
  1. // copia.c: Copia de ficheros
  2. // Uso: copia <fichero_origen> <fichero_destino>
  3. /// Teoria . . .
  4. /// Se empieza por intentar hacer un divisor de archivos
  5. /// Ingresa el archivo
  6. /// Lee cabecera y si hay > es ok, < cierre...
  7. /// > 2do es el nombre y 1ero > "/" es que hay carpeta
  8. /// si la hay lee y va guardando caracter por caracter hasta en encontrar el
  9. /// siguiente > es el tamaño hasta <, finaliza encabezado sigue hasta la cantidad de bytes
  10. /// que se especificaron, si hay otro reinicia el proceso.
  11.  
  12. #include <stdio.h>
  13. #include <iostream>
  14. #include <string.h>
  15. using namespace std;
  16.  
  17. int c=0;
  18. int main(int argc, char **argv) {
  19.    FILE *abrir, *crear;
  20. //const int BUFSIZE=0x160000; // Tamaño del buffer
  21.    //unsigned char buffer[BUFSIZE];
  22. unsigned char buffer[1];
  23.    int bytesLeidos;
  24. char nombre[1023];
  25. char divisor[1023];
  26.  
  27.    if(argc != 3) {
  28.       cout<<"Usar: abrir <fichero_origen_ach>\n";
  29.       return 1;
  30.    }
  31. // Abrir el fichero de entrada en lectura y binario
  32.    abrir = fopen(argv[1], "rb");
  33.    if(!abrir) {
  34.       cout<<"El fichero "<<argv[1]<<" no existe o no puede ser abierto.\n";
  35.       return 1;
  36.    }
  37. int co=0;
  38. sprintf(divisor, "%d", co);
  39. strcpy(nombre,argv[1]);
  40. strcat(nombre,divisor);
  41. printf(nombre);
  42. getchar();
  43.  
  44.    // Crear o sobreescribir el fichero de salida en binario
  45.    crear = fopen(nombre, "wb");
  46.    if(!crear) {
  47.       cout<<"El fichero "<<argv[1]<<" no puede ser creado.\n";
  48.       fclose(abrir);
  49.       return 1;
  50.    }
  51. int i=100;
  52.    // Bucle de copia:
  53.  
  54.    while((bytesLeidos = fread(buffer, 1, 1, abrir))) {
  55. if (c == i){
  56. co++;
  57. strcat(nombre,divisor);
  58. strcpy(nombre,argv[1]);
  59. sprintf(divisor, "%d", co);
  60. printf(divisor); // prueba
  61. getchar(); // prueba
  62. }
  63. fwrite(buffer, 1, bytesLeidos, crear);
  64. c++;
  65. }
  66.  
  67.    // Cerrar ficheros:
  68.    fclose(abrir);
  69.    fclose(crear);
  70.    return 0;
  71. }


« Última modificación: 29 Marzo 2015, 01:10 am por sabeeee » En línea

"Vengándose, uno iguala a su enemigo; perdonando, uno se muestra superior a él."
Francis Bacon
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Ayuda con un divisor de archivos
« Respuesta #1 en: 29 Marzo 2015, 05:08 am »

Por favor requiero su ayuda para poder terminar este código, es similar al hacha, divide los archivos en 100 bytes pero no funciona como quiero que funcione
Lo primero que debes hacer es indicar de una forma clara y precisa que operación debe realizar el programa (los comentarios en el se deben cambiar en esa misma linea).

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
sabeeee

Desconectado Desconectado

Mensajes: 155


Ver Perfil
Re: Ayuda con un divisor de archivos
« Respuesta #2 en: 29 Marzo 2015, 05:47 am »

Lo primero que debes hacer es indicar de una forma clara y precisa que operación debe realizar el programa (los comentarios en el se deben cambiar en esa misma linea).

Un saludo

Clara de que ? si el proyecto es personal.
En línea

"Vengándose, uno iguala a su enemigo; perdonando, uno se muestra superior a él."
Francis Bacon
crack81

Desconectado Desconectado

Mensajes: 222



Ver Perfil
Re: Ayuda con un divisor de archivos
« Respuesta #3 en: 31 Marzo 2015, 06:40 am »

Te dejo este codigo que hice a mi me servio pruebala si tienes dudas me comentas saludos.

Esta hecho en c++ asi te evitas la conversion

Código
  1. #include<iostream>
  2. #include<string>
  3. #include <fstream>//maneja los ficheros de lectura como escritura
  4. #include <cstdlib> //llama la funcion itoa
  5. using namespace std;
  6.  
  7.  
  8. int main()
  9. {
  10.  
  11.   ifstream leer("contar.exe",ifstream::binary);   //nombre del archivo a partir
  12.   leer.seekg (0, leer.beg); //El archivo sera abierto desde la posicion cero
  13.  
  14.   char buffer[100];  //almacenara bloque de 100 bytes o char
  15.   char filename[10];//almacenara el entero convertirdo a caracteres
  16.   int cont=1;//el contador servipara para nombrar a los archivos creados
  17.   string data="";//almancerar el numero convertiro a caracter mas la extension .exe
  18.  
  19.  
  20.   if (leer.is_open()) {//si el archivo se pudo abrir entra
  21.  
  22. while(!leer.eof()) {//leera el archivo hasta que llege al final de el
  23.  
  24. leer.read(buffer,100);  //leera por bloque de 100 byte o char
  25.  
  26. itoa(cont,filename,10);//convierte de entero a arreglo de caracterese
  27. data=filename;//asigna el arreglo a un string
  28. data=data+".exe";//al string se le añade la extension .exe
  29.  
  30. ofstream escribir(data.c_str(),ofstream::binary);//creamos un nuevo
  31. //archivo a escribir con el nombre que almacena data
  32.  
  33. escribir.write(buffer,100);//escribira solo bloques de 100
  34. escribir.close();//cierra el fichero para que en la siguiente iteracion
  35. //pueda crear otro archivo
  36.  
  37.  
  38. cont++;//aumenta el contador en uno
  39.  
  40.  }
  41. leer.close();//cierra el fichero de lectura
  42.   }
  43.  
  44.  
  45.  
  46. cout<<"vueltas "<<cont-1<<endl; //muestra el numero de vueltas realizadas
  47.  
  48. cin.get();
  49. cin.get();
  50. return 0;
  51. }
En línea

Si C/C++ es el padre de los lenguajes entonces ASM es dios.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Programa en c "Máximo común divisor de dos números"
Programación C/C++
rayk 8 51,750 Último mensaje 26 Octubre 2013, 23:06 pm
por absgab
divisor binario de arreglo, no funciona
Electrónica
loml666 0 2,366 Último mensaje 4 Agosto 2013, 18:48 pm
por loml666
Divisor en VHDL
Electrónica
Casilda 0 4,009 Último mensaje 5 Junio 2014, 23:41 pm
por Casilda
mayor divisor primo
Programación C/C++
mariano96 2 2,071 Último mensaje 24 Febrero 2015, 02:01 am
por mariano96
Maximo común divisor c++
Programación C/C++
Laleylalo5 2 2,832 Último mensaje 31 Marzo 2017, 00:12 am
por ivancea96
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines