Problema al crear archivo en binary

Iniciado por antkk, 5 Junio 2015, 17:37 PM

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

antkk

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:

"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 (cpp) [Seleccionar]
void Matriz::Escribir(const char* nombre, const char* comentario){

ofstream archivo(nombre,ios::binary | ios::out);

if(!archivo.is_open())
cout << "Error de apertura de archivo. ";
else{

archivo << "MP" << endl;

if(comentario != 0){
archivo << '#' << comentario << endl;
}

archivo << this->nfilas << endl;

for(int i=0;i<this->nfilas;i++){
archivo.write((char*)(&this->ncolumnas[i]),sizeof(int));
archivo << " ";
for(int j=0;j<ncolumnas[i];j++){
archivo.write((char*)(&this->datos[i][j]),sizeof(double));
archivo << " ";
}
}


}

archivo.close();
}


Los datos privados de la clase Matriz son estos:

Código (cpp) [Seleccionar]
int nfilas;
int *ncolumnas; // Número de columnas de cada fila.
double **datos;


Mod: los códigos deben ir en etiquetas GeSHi

ivancea96

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)