Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: antkk en 5 Junio 2015, 17:37 pm



Título: Problema al crear archivo en binary
Publicado por: antkk en 5 Junio 2015, 17:37 pm
Buenas, estoy haciendo un ejercicio y uno de los métodos de mi clase que se llama void Escribir, saca los datos de una matriz a un archivo que tiene que tener salida en binario. Me compila el programa, al ejecutar me crea un fichero en binario. Abro el archivo con gedit y me encuentro este problema:

"El archivo que abrió contiene algunos caracteres no válidos. Si continua editando este archivo puede corromper el documento.
También puede elegir cualquier otra codificación de caracteres e intentarlo de nuevo."

El contenido del archivo es este:

Código:
"MP
4
\00\00\00 \00\00\00\00\00\00\00@ \00\00\00\00\00\00\00@ \00\00\00 \00\00\00\00\00\00\F0? \00\00\00\00\00\00\F0? \00\00\00 \00\00\00\00\00\00@ \00\00\00\00\00\00@ \00\00\00\00\00\00@ \00\00\00 \00\00\00\00\00\00@ \00\00\00\00\00\00@ \00\00\00\00\00\00@ "

Y el código del método es este:

Código
  1. void Matriz::Escribir(const char* nombre, const char* comentario){
  2.  
  3. ofstream archivo(nombre,ios::binary | ios::out);
  4.  
  5. if(!archivo.is_open())
  6. cout << "Error de apertura de archivo. ";
  7. else{
  8.  
  9. archivo << "MP" << endl;
  10.  
  11. if(comentario != 0){
  12. archivo << '#' << comentario << endl;
  13. }
  14.  
  15. archivo << this->nfilas << endl;
  16.  
  17. for(int i=0;i<this->nfilas;i++){
  18. archivo.write((char*)(&this->ncolumnas[i]),sizeof(int));
  19. archivo << " ";
  20. for(int j=0;j<ncolumnas[i];j++){
  21. archivo.write((char*)(&this->datos[i][j]),sizeof(double));
  22. archivo << " ";
  23. }
  24. }
  25.  
  26.  
  27. }
  28.  
  29. archivo.close();
  30. }
  31.  

Los datos privados de la clase Matriz son estos:

Código
  1. int nfilas;
  2. int *ncolumnas; // Número de columnas de cada fila.
  3. double **datos;

Mod: los códigos deben ir en etiquetas GeSHi


Título: Re: Problema al crear archivo en binary
Publicado por: ivancea96 en 6 Junio 2015, 01:27 am
Si escribes datos binarios en un archivo, no puedes pretender abrir ese archivo con un editor de texto.

Utiliza un editor hexadecimal.

En cualquier caso, un archivo binario no es para ser leído por un humano.

Como dato a parte, si usas ofstream, no tienes que pasarle ios::out. (Ídem para ifstream e ios::in)