Programación General > C/C++
[C] sCopy - Ejemplo de manejo de ejecutables
(1/1)
The Swash:
--- Código: C ---#include <stdio.h>#include <stdlib.h> /* @autor The Swash @thanks psicosis*/int sCopy(char * Source, char * Dest); main(){ int result; result = sCopy("C:\Replace.exe","C:\Raimees.exe"); printf("%i",result); getchar(); } int sCopy(char * Source, char * Dest){ FILE * FSrc; //Puntero al archivo de origen; FILE * Dst; //Puntero al archivo de destino; char * Buffer; //Puntero al Buffer que almacenara la información del archivo origen; int Size = 0; //Variable que almacenara el tamaño del archivo; int Readed; //Variable que almacenara la cantidad de bytes leidos; int Writed; //Variable que almacenara la cantidad de bytes escritos; FSrc = fopen(Source, "rb"); //Abrimos el archivo de origen en modo lectura; Dst = fopen(Dest,"wb"); //Creamos el nuevo archivo; if ((FSrc == NULL) || (Dst == NULL)) //Condición que verifica si alguno de los 2 archivos no se pudo abrir; { return -1; //Si no se pudo abrir algo de los 2, retornamos -1 y salimos; } else //De lo contrario; { while(fgetc(FSrc) != EOF) //Mientras el caracter obtenido sea distinto al final del archivo; { Size++; //Aumentamos en 1 la variable Size, la cual como dijimos almacenara el tamaño del archivo; } rewind(FSrc); //Volvemos a la posición inicial del archivo para leer desde el principio Buffer = (char *) malloc(Size * sizeof(char)); //Generamos un espacio en memoria con el tamaño del archivo; Readed = fread(Buffer,sizeof(char),Size,FSrc); //Leemos el archivo y el resultado(bytes leidos) se almacenara en Readed; if (Readed = Size) //Si la cantidad de bytes leidos es igual al tamaño del archivo; { Writed = fwrite(Buffer,sizeof(char),Size,Dst); //Escribimos el nuevo archivo y almacenamos la cantidad de bytes escritosen Writed; if (Writed == Size) //Si la cantidad de bytes escritos es igual al tamaño del archivo; { free(Buffer); //Liberamos el espacio de memoria ocupado; fclose(FSrc); //Cerramos el archivo de origen; fclose(Dst); //Cerramos el archivo de destino; return 0; //Retornamos 0 es decir todo se realizó con éxito. } else //Si la cantidad de bytes escritos es distitan al tamaño del archivo, es posible que algo aya fallado; { free(Buffer); //Liberamos el espacio de memoria ocupado; fclose(FSrc); //Cerramos el archivo de origen; fclose(Dst); //Cerramos el archivo de destino; return -1; //Retornamos -1 diciendo que algo fallo y no se realizo correctamente; } } else //Si la cantidad de bytes escritos es distitan al tamaño del archivo, es posible que algo aya fallado; { free(Buffer); //Liberamos el espacio de memoria ocupado; fclose(FSrc); //Cerramos el archivo de origen; fclose(Dst); //Cerramos el archivo de destino; return -1; //Retornamos -1 diciendo que algo fallo y no se realizo correctamente; } }}
Les dejo esta función explicada, sencillamente copia un archivo binariamente.
Saludos.
Navegación
Ir a la versión completa