#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");
}
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;
}
}
}