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

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


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

Desconectado Desconectado

Mensajes: 2



Ver Perfil
[SOLUCIONADO] Ficheros binarios
« en: 1 Junio 2013, 12:35 pm »

Hola a todos,

Necesito ayuda con un problemita y es que estoy empezando con la lectura y escritura de ficheros binarios en C++.

Teniendo un archivo de texto con un número indeterminado de enteros separados cada uno por espacios, tabuladores o saltos de línea quiero leerlos y escribirlos en un fichero binario. He creado un programa para leer y escribir de uno en uno pero ahora me piden escribir en el fichero de salida en bloques de 512 bytes. Para ello utilizo un buffer con un tamaño de 512 usando la funcion write() para leer y la funcion read() para escribir pero el fichero de salida no está en formato binario.

Código
  1. #include <iostream>
  2. #include <fstream>
  3. #include <stdlib.h>
  4.  
  5. using namespace std;
  6.  
  7.  
  8. int main (int argc, char **argv)
  9. {
  10. const int TAM_BUFFER = 512;
  11. char buffer [TAM_BUFFER];  
  12.  
  13.  
  14. ifstream fi;
  15. ofstream fo;
  16.  
  17.  
  18. if (argc != 3) {
  19. cerr << "Error: Numero de argumentos incorrecto\n";
  20. cerr << "Formato: " << argv[0]<< " <fich_in> <fich_out>\n";
  21. exit (1);
  22. }
  23.  
  24. fi.open (argv[1]);
  25.  
  26. if (!fi) {
  27. cerr << "Error: no pudo abrirse " << argv[1] << endl;
  28. exit (2);
  29. }
  30.  
  31. fo.open(argv[2], ofstream::binary);
  32.  
  33. if (fo.fail())
  34. {
  35. cerr << "Error: No pudo crearse " << argv[2] << endl;
  36. exit (2);
  37. }
  38.  
  39.  
  40. while (fi.read(reinterpret_cast<char*>(buffer), TAM_BUFFER))
  41. fo.write(buffer, TAM_BUFFER);
  42.  
  43. fo.write(buffer, fi.gcount());
  44.  
  45.  
  46. fi.close ();
  47. fo.close ();
  48.  
  49. return (0);
  50. }
  51.  
Gracias de antemano. Un saludo.


« Última modificación: 1 Junio 2013, 18:15 pm por KikoSalinas » En línea

Richard Stallman: “¿El éxito es la meta? Pienso que no. La meta es conseguir, defender y mantener nuestra libertad”
KikoSalinas

Desconectado Desconectado

Mensajes: 2



Ver Perfil
Re: [SOLUCIONADO] Ficheros binarios
« Respuesta #1 en: 1 Junio 2013, 18:16 pm »

Ya está solucionado


Código
  1. #include <iostream>
  2. #include <fstream>
  3. #include <stdlib.h>
  4.  
  5. using namespace std;
  6.  
  7.  
  8. int main (int argc, char **argv)
  9. {
  10. const int TAM_BUFFER = 128;
  11. int buffer [TAM_BUFFER];  
  12. int entero, cont=0;
  13.  
  14.  
  15. ifstream fi;
  16. ofstream fo;
  17.  
  18.  
  19. if (argc != 3) {
  20. cerr << "Error: Numero de argumentos incorrecto\n";
  21. cerr << "Formato: " << argv[0]<< " <fich_in> <fich_out>\n";
  22. exit (1);
  23. }
  24.  
  25. fi.open (argv[1]);
  26.  
  27. if (!fi) {
  28. cerr << "Error: no pudo abrirse " << argv[1] << endl;
  29. exit (2);
  30. }
  31.  
  32. fo.open(argv[2], ofstream::binary);
  33.  
  34. if (fo.fail())
  35. {
  36. cerr << "Error: No pudo crearse " << argv[2] << endl;
  37. exit (2);
  38. }
  39.  
  40.  
  41. fi >> entero;
  42.  
  43. while (!fi.eof())
  44. {
  45. if(cont==TAM_BUFFER){
  46. for(int i=0; i<TAM_BUFFER; i++)
  47. fo.write ((const char *) (&buffer[i]), sizeof (int));
  48. }
  49. buffer[cont] = entero;
  50. cont++;
  51.  
  52. fi >> entero;
  53.  
  54. }
  55.  
  56. for(int i=0; i<cont; i++)
  57. fo.write ((const char *) (&buffer[i]), sizeof (int));
  58.  
  59.  
  60. fi.close ();
  61. fo.close ();
  62.  
  63. return (0);
  64. }


En línea

Richard Stallman: “¿El éxito es la meta? Pienso que no. La meta es conseguir, defender y mantener nuestra libertad”
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines