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

 

 


Tema destacado:


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

Desconectado Desconectado

Mensajes: 18


Ver Perfil
Problema con código [C]
« en: 28 Marzo 2013, 23:52 pm »

Hola amigos, tengo un problema que no consigo solventar.

Necesito crear un programa que copie un archivo (da igual el formato) a otro directorio con los mismos derechos [read, write...] que el original, usando el Gedit como editor de texto y la terminal de Ubuntu  para ejecutarlo.

La intensión o finalidad del programa es que haga lo mismo que el comando cp en Linux, pero no consigo hacer nada útil. Por favor, me seríais de mucha ayuda si me ayudáis con el código, os estaré eternamente agradecido.

Saludos y nuevamente, gracias por el interés y la ayuda que pudierais aportarme!


« Última modificación: 28 Marzo 2013, 23:55 pm por Borluck » En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Problema con código [C]
« Respuesta #1 en: 29 Marzo 2013, 01:30 am »

Con la librería estándar de I/E de C++:

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


« Última modificación: 29 Marzo 2013, 01:34 am 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
Borluck

Desconectado Desconectado

Mensajes: 18


Ver Perfil
Re: Problema con código [C]
« Respuesta #2 en: 29 Marzo 2013, 03:34 am »

Grande compañero, eres un grande! MUCHÍSIMAS GRACIAS!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema con código
Programación Visual Basic
z3r0 Bug 7 2,219 Último mensaje 24 Noviembre 2005, 16:51 pm
por NYlOn
¿Cuál es la diferencia entre código objeto, código máquina y código binario?
Programación General
Aikanáro Anário 9 29,011 Último mensaje 23 Diciembre 2010, 15:19 pm
por pucheto
Extrayendo código fuente de una web (Problema con código generado por JS)
PHP
Littl3 4 7,866 Último mensaje 3 Marzo 2011, 04:13 am
por Nakp
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines