Bueno les dejo este
code que hice despues de estudir las funcines : fread(), fwrite(), fopen().............
Sirve para coppiar cualquier tipo de archivo, que tengamos en la carpeta de programa y le podremos poner
cualquier nombre al fichero de salida!

Código: Seleccionar todo

#include <stdio.h>
#include <stdlib.h>
 
/********************************
Autor : CsolosusRed
IDE : DEV-C++
Web :Indetectables.Net
********************************/

/*Copia binariamente un fichero de cualuier tipo!*/

int main()
{
  FILE* f1;
  FILE* f2;
  char nombre_entrada[60];
  char nombre_salida[60];
  
  printf("Escoja el nmbre del archivo a Abrir : ");
  scanf("%s", &nombre_entrada);

f1 = fopen(nombre_entrada, "rb");

if(f1 == NULL)
{
     perror("No se puede abrir el fichero!");
     system("PAUSE");
     return -1;
}


printf("Escoja el Nombre del Archivo de salida : ");
scanf("%s", &nombre_salida);

 f2 = fopen(nombre_salida,"wb");

 char buffer[1000];
 int leidos;
  
  /*Con esto copiamos el archivo al "buffer" y guardamos la casntidad
  de datos copiados en la variabke "leidos"!*/

 leidos = fread(buffer, 1 , 1000, f1);
 
 while(leidos != 0)
 {            
              /*fwrite(), usamos parecido a fread(), para escribir bytes*/
              fwrite(buffer , 1 ,leidos , f2);
           
              //Volvemos a leer
              leidos = fread(buffer, 1 , 1000, f1);
 }

  //Listo cerramos los ficheros  que abrimos!
  fclose(f1);
  fclose(f2);

 system("PAUSE");	
  return 0;
}
Saludos y espero que algui le sirva!
obey escribió:Pues si tuviese mas edad todavia pero esqe perder la virginidad con tu profesora de informatica y que ademas tenga 50....
Realmente con fopen tienes doiferentes parametros r,rb,rw ( no es mas que abrir por lectura,lectura y escritura,binario,etc) no me habia fijado en fread ya que hasta ahora lo hice con fopen solamente..
Gracias ColosusRed

Salu2
Blog técnico dedicado a la seguridad informática y al estudio de nuevas vulnerabilidades.
Blog: http://www.seginformatica.net
Twitter: https://twitter.com/#!/p0is0nseginf
Está bien escrito yo no veo fallas solo un consejo si vas a escribir binarios, en el buffer almacena de 1024 bytes
//mHmm..
linkgl escribió:Está bien escrito yo no veo fallas solo un consejo si vas a escribir binarios, en el buffer almacena de 1024 bytes
En realidad lo mejor seria sacra el tamaño del archivo! y Crear un "malloc" del tamaño del archivo
y en ves de escribir 1000 bytes por iteracion(con el while) hasta que se acaben los bytes a copiar, los escribimos
todos de una ves!
mira este code que me hice!

Código: Seleccionar todo

#include <stdio.h>

/*Copia binariamente un fichero de cualuier tipo!*/

int main(int argc, char *argv)
{
   
  //cargamos las variables/punteros de FILES
  FILE* f1;
  FILE* f2;
  //Variables para los nonbres
  char nombre_entrada[60];
  char nombre_salida[60];
  //Variable para el peso
  int peso;
 
  printf("Escoja el nmbre del archivo a Abrir : ");
  scanf("%s", &nombre_entrada);

/*Abrimos el fichero Original en modo Lectura(rb) & de tipo binario!*/
f1 = fopen(nombre_entrada, "rb");

//Si falta el fichero
if(f1 == NULL)
{
     perror("No se puede abrir el fichero!");
     system("PAUSE");
     return -1;
}


printf("Escoja el Nombre del Archivo de salida : ");
scanf("%s", &nombre_salida);


/*Abrimos ambos archivos, el de entrada en modo lectura y el de salida en modo escritura!!*/
f1 = fopen(nombre_entrada, "rb");

f2 = fopen(nombre_salida, "wb");


/*Scamos el peso del primer archivo! Iendonos hasta el fina del mismo!*/

//nos vamos al final del archivo!
fseek(f1 , 0 , SEEK_END);

//Scamos el tamaño del archivo, y lo metemos en la variable peso
peso =  ftell( f1 );

/*Cargamos un buffer tipo malloc para reservar espcio en memorio del tamaño del primer archivo! mas uno bytes de mas (por si)*/
char *buffer = (char*)malloc(peso + 15);

//Haora regresamos al inicio del archivo para comensar a eer los bytes desde Hay!
fseek(f1 , 0 , SEEK_SET);

/*Como tenemos ya el buffer del tamaño del archivo y estamos ubicados al principio del archivos que vamos a copiar,
comensamos a leer los bytes y los mandamaos al buffer que los almacenara!! */
fread(buffer, peso , sizeof( char ) , f1);

/*Bien ya tenemoslos bytes en el buffer(memoria) y haora usamos "fwrite()" para escribir con
esos bytes un archivo nuevo!(Son los mismos Bytes de f1 por lo tanto sera un copia!)*/

fwrite(buffer , peso , sizeof( char ) , f2);

//Abrimos y escrimbimos dentro de un "text" el nombre del archivo creado, para distinguir el original de la copia!

FILE *text = fopen("Log.txt", "wb");
fprintf(text, "Se Ha creado el archivo : %s", nombre_salida);

  /*Listo! Cerramos los archivos abiertos y liberamos el espacio en memoria reservado por el "malloc"*/
fclose(f1);
fclose(f2);
fclose(text);
free(buffer);

  system("PAUSE");   
  return 0;
}
Me esmere en explicarlo!
Si ven algun error o una forma de optimirsarlo comenten!
obey escribió:Pues si tuviese mas edad todavia pero esqe perder la virginidad con tu profesora de informatica y que ademas tenga 50....
Estas abriendo dos veces el primer fichero en modo lectura binaria, y sí está bien eso de sacar el peso total del archivo y meter los datos directamente el problema viene cuando el archivo es demasiado grande al grabar todo al "madrazo" se te va a colgar el programa encambio con un while puedes "pausar" Saludos!
//mHmm..
Responder

Volver a “Fuentes”