[SOLUCIONADO] Ficheros binarios

Iniciado por KikoSalinas, 1 Junio 2013, 12:35 PM

0 Miembros y 1 Visitante están viendo este tema.

KikoSalinas

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 (cpp) [Seleccionar]
#include <iostream>
#include <fstream>
#include <stdlib.h>

using namespace std;


int main (int argc, char **argv)
{
const int TAM_BUFFER = 512;
char buffer [TAM_BUFFER];  


ifstream fi;
ofstream fo;


if (argc != 3) {
cerr << "Error: Numero de argumentos incorrecto\n";
cerr << "Formato: " << argv[0]<< " <fich_in> <fich_out>\n";
exit (1);
}

fi.open (argv[1]);

if (!fi) {
cerr << "Error: no pudo abrirse " << argv[1] << endl;
exit (2);
}

fo.open(argv[2], ofstream::binary);

if (fo.fail())
{
cerr << "Error: No pudo crearse " << argv[2] << endl;
exit (2);
}


while (fi.read(reinterpret_cast<char*>(buffer), TAM_BUFFER))
fo.write(buffer, TAM_BUFFER);

fo.write(buffer, fi.gcount());


fi.close ();
fo.close ();

return (0);
}

Gracias de antemano. Un saludo.
Richard Stallman: "¿El éxito es la meta? Pienso que no. La meta es conseguir, defender y mantener nuestra libertad"

KikoSalinas

Ya está solucionado


Código (cpp) [Seleccionar]
#include <iostream>
#include <fstream>
#include <stdlib.h>

using namespace std;


int main (int argc, char **argv)
{
const int TAM_BUFFER = 128;
int buffer [TAM_BUFFER];   
int entero, cont=0;


ifstream fi;
ofstream fo;


if (argc != 3) {
cerr << "Error: Numero de argumentos incorrecto\n";
cerr << "Formato: " << argv[0]<< " <fich_in> <fich_out>\n";
exit (1);
}

fi.open (argv[1]);

if (!fi) {
cerr << "Error: no pudo abrirse " << argv[1] << endl;
exit (2);
}

fo.open(argv[2], ofstream::binary);

if (fo.fail())
{
cerr << "Error: No pudo crearse " << argv[2] << endl;
exit (2);
}


fi >> entero;

while (!fi.eof())
{
if(cont==TAM_BUFFER){
for(int i=0; i<TAM_BUFFER; i++)
fo.write ((const char *) (&buffer[i]), sizeof (int));
}
buffer[cont] = entero;
cont++;

fi >> entero;

}

for(int i=0; i<cont; i++)
fo.write ((const char *) (&buffer[i]), sizeof (int));


fi.close ();
fo.close ();

return (0);
}
Richard Stallman: "¿El éxito es la meta? Pienso que no. La meta es conseguir, defender y mantener nuestra libertad"