elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Copiar .png
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Copiar .png  (Leído 2,150 veces)
Josstaa

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Copiar .png
« en: 24 Febrero 2013, 04:13 am »

He estado intentando por un buen tiempo copiar archivos .png, pero no he podido, los métodos que hay por internet funcionan pero para archivos de texto, a demás, no basta con la funcion FileCopy o como sea, ya que necesito enviarla por sockets, me serviría perfecto un ejemplo de copiarla en el mismo directorio..

De antemano, gracias.


En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Copiar .png
« Respuesta #1 en: 24 Febrero 2013, 11:31 am »

Voy a rescatar el código de un viejo proyecto:

Código
  1. // Esta funcion copia el contenido de un archivo a otro
  2.  
  3. void AMC::CopiarArchivos(ifstream &Lectura,ofstream &Escritura,unsigned long long Tamanyo_Archivo)
  4. {
  5. char* Cosa; // Buffer para leer
  6. unsigned int Tamanyo_Lectura; // Variable que designa el tamaño de cada lectura
  7. unsigned long long Contador = 0;  // Variable auxiliar, se utiliza para contabilizar el progueso obtenido y calcular un porcentaje
  8.    unsigned short Porcentaje = 0; // Porcentaje actual
  9.    unsigned long long Limite; // Valor auxiliar correspondiente al 1% del tamanyo del archivo. Se utiliza para saber cuando hay que aumentar el porcentaje en 1
  10.    unsigned long long Offset = 0; // Variable que contiene la posicion del archivo actual
  11.  
  12. if (!Lectura)
  13. throw Excepcion("ERROR AL COPIAR ARCHIVOS, ARCHIVO DE ORIGEN NO ENCONTRADO",ARCHIVO_NO_ENCONTRADO);
  14.  
  15. // Si el tamanyo del archivo es inferior al buffer máximo permitido. Se leera el archivo del tirón
  16.  
  17.    if (Tamanyo_Archivo < MAX_LECTURA)
  18.            Tamanyo_Lectura = Tamanyo_Archivo;
  19.    else
  20.             Tamanyo_Lectura = MAX_LECTURA; // Si no, se dejará en el máximo valor
  21.  
  22. /* Asignamos la memoria al buffer, si no se puede satisfacer la operación se intentará asignar un buffer menor,
  23. si el tamaño del buffer llega a 1. La propia función de asignar memoria lanza una excepción que termina el programa */
  24.  
  25. while (!AsignarMemoria(Cosa,Tamanyo_Lectura))
  26. {
  27. Tamanyo_Lectura /=2;
  28. }
  29.  
  30. /* Decidimos si vamos a mostrar el porcentaje o no, para aumentar el rendimiento. Solo se mostrará
  31. si su tamaño es superior a 100 MB */
  32.  
  33.    if (Tamanyo_Archivo >  104857600)
  34. Limite = Tamanyo_Archivo/100;
  35.    else
  36.             Limite = 0; // Desactivado
  37.  
  38.  
  39. while (Offset != Tamanyo_Archivo) // Mientras la posicion del archivo no llegue a su tamaño
  40.          {
  41.               // Leemos y escribimos
  42.  
  43.               Lectura.read(Cosa,Tamanyo_Lectura);
  44.               Escritura.write(Cosa,Tamanyo_Lectura);
  45.  
  46.   Offset += Tamanyo_Lectura; // Aumentamos el progueso del archivo
  47.  
  48.   // Si el muestreo de porcentaje está activado...
  49.  
  50.               if (Limite != 0)
  51.               {
  52.   Contador += Tamanyo_Lectura; // Aumentamos el medidor
  53.  
  54.   if (Contador >= Limite) // Si el medidor supera el 1% del archivo
  55.   {
  56.  Porcentaje++; // Aumentamos el porcentaje
  57.  cout<<Porcentaje<<"%"<<endl; // Lo mostramos por pantalla
  58.  Contador = 0; // Reseteamos el medidor
  59.   }
  60.               }
  61.  
  62.   // Antes de repetir el bucle, comprobaremos si en la proxima lectura desbordaremos el archivo
  63.  
  64.               if ((Tamanyo_Archivo - Offset) < Tamanyo_Lectura)
  65.               {
  66.  // Si así es, hacemos una lectura con lo que nos quede del archivo
  67.  
  68.                  Lectura.read(Cosa,Tamanyo_Archivo - Offset);
  69.                  Escritura.write(Cosa,Tamanyo_Archivo - Offset);
  70.  
  71.  // Situamos el indicador de posición al final del archivo
  72.  
  73.                  Offset = Tamanyo_Archivo;
  74.               }
  75.  
  76.         }
  77.  
  78.      delete[] Cosa; //Borramos la memoria dinámica usada
  79. }
  80.  
  81. /* Asigna el buffer de lectura, devuelve verdadero si tuvo exito.
  82.  
  83. Si no tuvo exito, devuelve falso por si se quiere modificar. Si no se puede modificar más, se lanza una excepción */
  84.  
  85. inline bool AMC::AsignarMemoria(char* &Cosa,unsigned int Lectura)
  86. {
  87. try
  88. {
  89. Cosa = new char[Lectura]; // Asignamos el buffer
  90. return true; // Hemos conseguido asignar el buffer con exito
  91. }
  92. catch(...) // Si ocurrió alguna excepción
  93. {
  94. if (Lectura > 1) // Se devolverá "falso" para indicar que no se pudo asignar la memoria y asi dar una oportunidad para asignar un buffer menor
  95. return false;
  96. else // Si el tamaño del buffer no puede disminuir más, se lanza una excepción.
  97. throw Excepcion("Error inesperado en la memoria",MEMORIA_NO_DISPONIBLE);
  98. }
  99. }
  100.  


« Última modificación: 24 Febrero 2013, 12:30 pm por amchacon » En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
COPIAR CD'S
Software
GERARDO 0 2,051 Último mensaje 23 Enero 2003, 01:50 am
por GERARDO
copiar vcd
Multimedia
txispita1704 3 2,724 Último mensaje 3 Febrero 2004, 02:48 am
por Songoku
Copiar DVD al HD
Multimedia
h4z3 2 2,413 Último mensaje 15 Abril 2004, 18:51 pm
por BZM
copiar un dvd
Multimedia
orach 7 4,119 Último mensaje 10 Mayo 2004, 02:42 am
por Songoku
Copiar de dvd a cd
Multimedia
YeKTa 1 1,926 Último mensaje 18 Agosto 2005, 19:10 pm
por Songoku
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines