Ayuda con un divisor de archivos

Iniciado por sabeeee, 29 Marzo 2015, 01:08 AM

0 Miembros y 1 Visitante están viendo este tema.

sabeeee

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 (cpp) [Seleccionar]
// copia.c: Copia de ficheros
// Uso: copia <fichero_origen> <fichero_destino>
/// Teoria . . .
/// Se empieza por intentar hacer un divisor de archivos
/// Ingresa el archivo
/// Lee cabecera y si hay > es ok, < cierre...
/// > 2do es el nombre y 1ero > "/" es que hay carpeta
/// si la hay lee y va guardando caracter por caracter hasta en encontrar el
/// siguiente > es el tamaño hasta <, finaliza encabezado sigue hasta la cantidad de bytes
/// que se especificaron, si hay otro reinicia el proceso.

#include <stdio.h>
#include <iostream>
#include <string.h>
using namespace std;

int c=0;
int main(int argc, char **argv) {
   FILE *abrir, *crear;
//const int BUFSIZE=0x160000; // Tamaño del buffer
   //unsigned char buffer[BUFSIZE];
unsigned char buffer[1];
   int bytesLeidos;
char nombre[1023];
char divisor[1023];

   if(argc != 3) {
      cout<<"Usar: abrir <fichero_origen_ach>\n";
      return 1;
   }
// Abrir el fichero de entrada en lectura y binario
   abrir = fopen(argv[1], "rb");
   if(!abrir) {
      cout<<"El fichero "<<argv[1]<<" no existe o no puede ser abierto.\n";
      return 1;
   }
int co=0;
sprintf(divisor, "%d", co);
strcpy(nombre,argv[1]);
strcat(nombre,divisor);
printf(nombre);
getchar();

   // Crear o sobreescribir el fichero de salida en binario
   crear = fopen(nombre, "wb");
   if(!crear) {
      cout<<"El fichero "<<argv[1]<<" no puede ser creado.\n";
      fclose(abrir);
      return 1;
   }
int i=100;
   // Bucle de copia:

   while((bytesLeidos = fread(buffer, 1, 1, abrir))) {
if (c == i){
co++;
strcat(nombre,divisor);
strcpy(nombre,argv[1]);
sprintf(divisor, "%d", co);
printf(divisor); // prueba
getchar(); // prueba
}
fwrite(buffer, 1, bytesLeidos, crear);
c++;
}

   // Cerrar ficheros:
   fclose(abrir);
   fclose(crear);
   return 0;
}
"Vengándose, uno iguala a su enemigo; perdonando, uno se muestra superior a él."
Francis Bacon

rir3760

Cita de: sabeeee en 29 Marzo 2015, 01:08 AMPor 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
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

Cita de: rir3760 en 29 Marzo 2015, 05:08 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.
"Vengándose, uno iguala a su enemigo; perdonando, uno se muestra superior a él."
Francis Bacon

crack81

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 (cpp) [Seleccionar]
#include<iostream>
#include<string>
#include <fstream>//maneja los ficheros de lectura como escritura
#include <cstdlib> //llama la funcion itoa
using namespace std;


int main()
{

   ifstream leer("contar.exe",ifstream::binary);   //nombre del archivo a partir
   leer.seekg (0, leer.beg); //El archivo sera abierto desde la posicion cero

   char buffer[100];  //almacenara bloque de 100 bytes o char
   char filename[10];//almacenara el entero convertirdo a caracteres
   int cont=1;//el contador servipara para nombrar a los archivos creados
   string data="";//almancerar el numero convertiro a caracter mas la extension .exe


   if (leer.is_open()) {//si el archivo se pudo abrir entra

while(!leer.eof()) {//leera el archivo hasta que llege al final de el

leer.read(buffer,100);  //leera por bloque de 100 byte o char

itoa(cont,filename,10);//convierte de entero a arreglo de caracterese
data=filename;//asigna el arreglo a un string
data=data+".exe";//al string se le añade la extension .exe

ofstream escribir(data.c_str(),ofstream::binary);//creamos un nuevo
//archivo a escribir con el nombre que almacena data

escribir.write(buffer,100);//escribira solo bloques de 100
escribir.close();//cierra el fichero para que en la siguiente iteracion
//pueda crear otro archivo


cont++;//aumenta el contador en uno

  }
leer.close();//cierra el fichero de lectura
   }



cout<<"vueltas "<<cont-1<<endl; //muestra el numero de vueltas realizadas

cin.get();
cin.get();
return 0;
}
Si C/C++ es el padre de los lenguajes entonces ASM es dios.