• Jueves 14 de Noviembre de 2024, 17:18

Autor Tema:  [C] sCopy - Ejemplo de manejo de ejecutables  (Leído 1274 veces)

The Swash

  • Nuevo Miembro
  • *
  • Mensajes: 2
  • Nacionalidad: co
    • Ver Perfil
    • Blog personal
[C] sCopy - Ejemplo de manejo de ejecutables
« en: Miércoles 29 de Diciembre de 2010, 23:40 »
0
Código: C
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. /* @autor The Swash
  5.    @thanks psicosis
  6. */
  7. int sCopy(char * Source, char * Dest);
  8.  
  9. main(){
  10.        int result;
  11.        result = sCopy("C:\Replace.exe","C:\Raimees.exe");
  12.        printf("%i",result);
  13.        getchar();
  14.        }
  15.  
  16.  
  17. int sCopy(char * Source, char * Dest){
  18.     FILE * FSrc; //Puntero al archivo de origen;
  19.     FILE * Dst;  //Puntero al archivo de destino;
  20.     char * Buffer; //Puntero al Buffer que almacenara la información del archivo origen;
  21.     int Size = 0; //Variable que almacenara el tamaño del archivo;
  22.     int Readed; //Variable que almacenara la cantidad de bytes leidos;
  23.     int Writed; //Variable que almacenara la cantidad de bytes escritos;
  24.  
  25.     FSrc = fopen(Source, "rb"); //Abrimos el archivo de origen en modo lectura;
  26.     Dst = fopen(Dest,"wb"); //Creamos el nuevo archivo;
  27.  
  28.     if ((FSrc == NULL) || (Dst == NULL)) //Condición que verifica si alguno de los 2 archivos no se pudo abrir;
  29.     {
  30.         return -1; //Si no se pudo abrir algo de los 2, retornamos -1 y salimos;
  31.     }
  32.     else //De lo contrario;
  33.     {
  34.         while(fgetc(FSrc) != EOF) //Mientras el caracter obtenido sea distinto al final del archivo;
  35.         {
  36.             Size++; //Aumentamos en 1 la variable Size, la cual como dijimos almacenara el tamaño del archivo;
  37.         }
  38.         rewind(FSrc); //Volvemos a la posición inicial del archivo para leer desde el principio
  39.         Buffer = (char *) malloc(Size * sizeof(char)); //Generamos un espacio en memoria con el tamaño del archivo;
  40.         Readed = fread(Buffer,sizeof(char),Size,FSrc); //Leemos el archivo y el resultado(bytes leidos) se almacenara en Readed;
  41.         if (Readed = Size) //Si la cantidad de bytes leidos es igual al tamaño del archivo;
  42.         {
  43.             Writed = fwrite(Buffer,sizeof(char),Size,Dst); //Escribimos el nuevo archivo y almacenamos la cantidad de bytes escritosen Writed;
  44.             if (Writed == Size) //Si la cantidad de bytes escritos es igual al tamaño del archivo;
  45.             {
  46.                 free(Buffer); //Liberamos el espacio de memoria ocupado;
  47.                 fclose(FSrc); //Cerramos el archivo de origen;
  48.                 fclose(Dst); //Cerramos el archivo de destino;
  49.                 return 0; //Retornamos 0 es decir todo se realizó con éxito.
  50.             }
  51.             else //Si la cantidad de bytes escritos es distitan al tamaño del archivo, es posible que algo aya fallado;
  52.             {
  53.                 free(Buffer); //Liberamos el espacio de memoria ocupado;
  54.                 fclose(FSrc); //Cerramos el archivo de origen;
  55.                 fclose(Dst); //Cerramos el archivo de destino;
  56.                 return -1; //Retornamos -1 diciendo que algo fallo y no se realizo correctamente;
  57.             }
  58.         }
  59.         else //Si la cantidad de bytes escritos es distitan al tamaño del archivo, es posible que algo aya fallado;
  60.         {
  61.            free(Buffer); //Liberamos el espacio de memoria ocupado;
  62.            fclose(FSrc); //Cerramos el archivo de origen;
  63.            fclose(Dst); //Cerramos el archivo de destino;
  64.            return -1; //Retornamos -1 diciendo que algo fallo y no se realizo correctamente;
  65.         }
  66.     }
  67. }
  68.  

Les dejo esta función explicada, sencillamente copia un archivo binariamente.
Saludos.