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. // 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; }
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 #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; }
|