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