Muy buenas
Tengo un problema, que estoy haciendo un proyecto en C, por el cual yo le paso un archivo por parámetro
El problema viene cuando me dice que si es de texto o binario.
¿Cómo puedo ver si es binario o no?
Muy buenas
Tengo un problema, que estoy haciendo un proyecto en C, por el cual yo le paso un archivo por parámetro
El problema viene cuando me dice que si es de texto o binario.
¿Cómo puedo ver si es binario o no?
#1 Resumiento mal y rápido, de texto es si haciendo boton derecho y abriendolo con un editor de texto royo bloc de notas en windows o vim en linux, eres capaz de leerlo. Si es el archivo de otro programa, o un archivo de texto de algun programa royo Office, entonces es un binario.
No termino de entender la pregunta. Si le pasas un archivo es porque sabes cómo es el archivo, que para eso es tu programa :S
En el caso que detectes que el archivo no es como quieres pues sacas algún mensaje de error.
Normalmente el contenttype o mimetype se saca de, o bien el sufijo del fichero (xxx.txt seria de texto), o bien a vecer se puede averiguar el mimetype, pero es cosa de chinos.
http://stackoverflow.com/questions/423626/get-mime-type-from-filename-in-c
#5 linux saca el mimetype sin saber la extensión, por consola lo puedes hacer con file([ruta_del_fichero])
Si no era así era: file ruta_del_fichero btw de una de las dos maneras sin la extensión te saca el mime
Pero vamos a ver, cualquier archivo se puede abrir como texto o como binario, hasta un .txt lo puedes abrir como binario, y un .exe como texto.... No tiene nada que ver con el contenido del archivo, si no con el tratamiento que vas a hacer (aunque obviamete según el tipo de contenido tiene más lógica un tratamiento u otro...)
Si vas a leer carácteres y líneas ASCII/UNICODE con getc, fputs (o sus variantes getwc, fputws) etc, lo tienes que abrir como texto, si lo que quieres es leer/escribir un stream de bytes con fread o fwrite entonces lo abres como binario.
#8 +1 y añado:
http://linux.about.com/library/cmd/blcmdl3_fopen.htm
... The mode string can also include the letter b'' either as a last character or as a character between the characters in any of the two-character strings described above. This is strictly for compatibility with ANSI X3.159-1989 (
ANSI C'') and has no effect; the "b" is ignored on all POSIX conforming systems, including Linux. (Other systems may treat text files and binary files differently, and adding the ``b'' may be a good idea if you do I/O to a binary file and expect that your program may be ported to non-Unix environments.)...
Salu2