Bueno agradezco a psicosis por las recomendaciones y les mando un recadito que no lo recuerdo muy bien pero les coloco lo que recuerdo:
Linkgl tienes 2 fallas enormes, creo que para los que empezamos siempre seguimos las correcciones de los que estan más avanzados en el tema pero y si seguimos más errores aún, tienes un error en la condición
Si abre bien los 2 archivos retorna -1??
Además la idea de ftell con fseek es buena pero en un archivo de 4GB se consumira 4GB de memoria( o al menos eso se asume ), Por favor ser lo más posibles correctos en las correcciones y si no dejarla a otros usuarios.
Fin del recado.
p0is0n, te marco tus errores personalmente, primero no compruebas si los archivos se abrieron o no, te da igual.. Pero eso no es bien visto y puede causar errores, segundo cierras los 2 archivos y luego compruebas despues de cerrados si no se abrieron bien?
Código: Seleccionar todo
fclose(pArchivo1);
FILE * pArchivo2 = fopen(pDest,"wb");
fwrite(Buffer,1,peso,pArchivo2);
fclose(pArchivo2);
free(Buffer);
//Comprobacion para el return
if(pArchivo1 != NULL && pArchivo2 != NULL) return 1;
A mi no me funcionó pero tampoco me tome la molestia de arreglarlo.. Preferí hacer mi muestra:
Código: Seleccionar todo
#include <stdio.h>
#include <stdlib.h>
/* @autor The Swash
@thanks psicosis
*/
int sCopy(char * Source, char * Dest);
main(){
int xd;
xd = sCopy("C:\\Replace.exe","C:\\Raimees.exe");
printf("%i",xd);
getchar();
}
int sCopy(char * Source, char * Dest){
FILE * FSrc;
FILE * Dst;
char * Buffer;
int Size = 0;
int Readed;
int Writed;
FSrc = fopen(Source, "rb");
Dst = fopen(Dest,"wb");
if ((FSrc != NULL) && (Dst != NULL)){
while (fgetc(FSrc)!=EOF){
Size++;
}
rewind(FSrc);
Buffer = (char *) malloc(Size * sizeof(char));
Readed = fread(Buffer,1,Size,FSrc);
if (Readed == Size){
Writed = fwrite(Buffer,1,Size,Dst);
if (Writed == Size){
fclose(FSrc);
fclose(Dst);
free(Buffer);
return 0;
}
else{
fclose(FSrc);
fclose(Dst);
free(Buffer);
return -1;
}
}
}
else{
fclose(FSrc);
fclose(Dst);
return -1;
}
}
Saludos.