Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: sabeeee en 29 Marzo 2015, 01:08 am



Título: Ayuda con un divisor de archivos
Publicado por: sabeeee 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. }


Título: Re: Ayuda con un divisor de archivos
Publicado por: rir3760 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


Título: Re: Ayuda con un divisor de archivos
Publicado por: sabeeee 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.


Título: Re: Ayuda con un divisor de archivos
Publicado por: crack81 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. }