C/Visual C - Archivo binario como secuencial?? :S

 
Vista:

Archivo binario como secuencial?? :S

Publicado por Luchot (7 intervenciones) el 16/06/2005 17:13:30
Buenos dias,

Tengo una duda con respecto a este tema, resulta que creo un fichero en modo binario y luego le agrego una linea, pero luego de crearlo puedo ver su contenido con el comando "cat" desde un shell cualquiera (trabajo sobre linux). Alquien tiene idea de porqué pasa esto?

Aquí está el codigo que estoy utilizando:

void crearArchivos(){
FILE *fichero;

fichero = fopen("file.dat","r+b");

// SI EL FICHERO NO EXISTE LO CREA
if(!fichero) {
fichero = fopen("file.dat","wb");
fseek(fichero, 0, SEEK_END);
// ESCRIBO CADENA DIRECTA " "
fwrite("cualquier\n", sizeof(char [10]), 1, fichero);

// ESCRIBO VARIABLE TIPO CHAR
char cadena[10]="132456789\n";
fwrite(&cadena, sizeof(char [10]), 1, fichero);
}

// CIERRA EL FICHERO
fclose(fichero);
}

Luego de salir del programa ejecuto el comando "cat" y esta es la salida:

root@server practica]# cat file.dat
cualquier
132456789

Por lo que el archivo no presenta ninguna diferencia con un archivo secuencial común....Alguna sugerencia?

Muchas gracias a todos;

Luchot
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Archivo binario como secuencial?? :S

Publicado por Yensi (3 intervenciones) el 16/06/2005 22:53:09
lo que pasa es que el archivo lo creas con la intencion de almacenar informacion binaria y no texto plano. Pero la informacion que almacenas es texto plano.
vamo con el ejemplo mas sencillo, par un archivo binario:

fwrite("cualquier\n", sizeof(char [10]), 1, fichero);
/*
lo que almacena es:
99 117 97 108 113 117 105 114 0 basura EOF
b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 (Bytes)
*/

cuando usas "cat file.dat" desde el prompt, cat lo que hace es interpretar el archivo de parametro como una cadena de bytes (caracteres ascci) y eso es lo que has guardado, por eso da como resultado "cualquier"

int var = 0x4142;
fwrite(&var, sizeof(var), 1, fichero);
/*
lo que almacena es:
65 66 EOF
b1 b2 (Bytes)
*/

usando "cat file.dat" te daria como resultado:
"AB"
interpreto tu variable var, (cat, no sabe que fue entero) como arreglo de bytes (char)
espero haber contribuido

Computer Science Bachelor
SECC member
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Archivo binario como secuencial?? :S

Publicado por fernando.gomez (1603 intervenciones) el 17/06/2005 02:49:59
Sólo como complemento, recuerda que en sistemas POSIX no hay diferencia entre un archivo de texto y uno binario. En Windows sí la hay porque el caracter \n es una combinación de códigos ASCII, mientras que en POSIX es sólo un número más.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Archivo binario como secuencial?? :S

Publicado por Luchot (7 intervenciones) el 17/06/2005 16:28:48
hola Fernando,

Es verdad, sinceramente algunos conceptos como este que comentas los estoy adquiriendo poco a poco, no es fácil migrar de ser programador Windows por muchos años a ser programador sobre linux, la verdad es dificil :p

Gracias por tu aporte;

Luchot
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Archivo binario como secuencial?? :S

Publicado por Luchot (7 intervenciones) el 17/06/2005 16:26:12
hola Yensi, gracias por tu excelente explicación, mi intención en realidad era lograr guardar los datos en un archivo que fuera "ilegible" para los usuarios, y lo he logrado haciendo una función de encripción de datos (y una antagonica para leer luego claro) que escribe sobre un archivo abierto en modo binario.

Gracias nuevamente, mis saludos;

Luchot
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar