duda BinaryReader

12/10/2005 - 19:32 por luis | Informe spam
Tengo este código:
fe.BaseStream.Seek(-128,SeekOrigin.End);

char []tag=fe.ReadChars(3);

Es decir, me coloco 128 bytes antes de un archivo y leo tres caracteres. Sin
embargo me han pasado con algún archivo que la matriz no se llena y queda
con longitud cero. Esto no es debido a que no hayan bytes ya que todos los
archivos son grandes (de 1 mega para arriba) con lo que siempre se tiene que
poder poner 128 bytes antes del final.

Con una matriz de bytes lo soluciono pero quiero saber por que no valen
siemrpe con la matriz de char. El problema supongo es que hay veces que en
esas posiciones hay caracteres (con lo que va bien) y otras veces puede
haber cualquier byte. Si es así ¿en qué se basa c# para no considerarlos
como posibles caracteres o no (algún rango en concreto)?

Preguntas similare

Leer las respuestas

#1 Octavio Hernandez
12/10/2005 - 19:48 | Informe spam
Luis,

Creo que el problema está en la codificación de caracteres que utilizas.
¿Qué constructor utilizas para crear el BinaryReader? Hay una variante en la
que se indica el sistema de codificación, y otra que utiliza por defecto
UTF-8.

Echale un vistazo a esto:

http://msdn.microsoft.com/library/d...stopic.asp

Slds - Octavio

"luis" escribió en el mensaje
news:eoOz%
Tengo este código:
fe.BaseStream.Seek(-128,SeekOrigin.End);

char []tag=fe.ReadChars(3);

Es decir, me coloco 128 bytes antes de un archivo y leo tres caracteres.
Sin
embargo me han pasado con algún archivo que la matriz no se llena y queda
con longitud cero. Esto no es debido a que no hayan bytes ya que todos los
archivos son grandes (de 1 mega para arriba) con lo que siempre se tiene
que
poder poner 128 bytes antes del final.

Con una matriz de bytes lo soluciono pero quiero saber por que no valen
siemrpe con la matriz de char. El problema supongo es que hay veces que en
esas posiciones hay caracteres (con lo que va bien) y otras veces puede
haber cualquier byte. Si es así ¿en qué se basa c# para no considerarlos
como posibles caracteres o no (algún rango en concreto)?














Respuesta Responder a este mensaje
#2 Zephryn Xirdal
12/10/2005 - 20:36 | Informe spam
Hola, Octavio.

Ya que estamos en el tema.

¿Qué codificación debo poner si quiero leer bytes en modo raw? Me refiero
a meter en un array del tipo byte *exactamente* lo que haya en el fichero,
sin interpretaciones de ningún tipo. Vamos el equivalente a meter en una
cadena de "unsigned char" lo leído mediante "fopen(<fich>,"rb"); del C de
toda la vida.

Es una duda que tengo desde hace mucho tiempo y que de momento no he
podido solventar, y creo yo que se trata de la solución al problema de
Luis.

En Wed, 12 Oct 2005 19:48:25 +0200, Octavio Hernandez
escribió:

Luis,

Creo que el problema está en la codificación de caracteres que utilizas.
¿Qué constructor utilizas para crear el BinaryReader? Hay una variante
en la
que se indica el sistema de codificación, y otra que utiliza por defecto
UTF-8.

Echale un vistazo a esto:

http://msdn.microsoft.com/library/d...stopic.asp

Slds - Octavio

"luis" escribió en el mensaje
news:eoOz%
Tengo este código:
fe.BaseStream.Seek(-128,SeekOrigin.End);

char []tag=fe.ReadChars(3);

Es decir, me coloco 128 bytes antes de un archivo y leo tres caracteres.
Sin
embargo me han pasado con algún archivo que la matriz no se llena y
queda
con longitud cero. Esto no es debido a que no hayan bytes ya que todos
los
archivos son grandes (de 1 mega para arriba) con lo que siempre se tiene
que
poder poner 128 bytes antes del final.

Con una matriz de bytes lo soluciono pero quiero saber por que no valen
siemrpe con la matriz de char. El problema supongo es que hay veces que
en
esas posiciones hay caracteres (con lo que va bien) y otras veces puede
haber cualquier byte. Si es así ¿en qué se basa c# para no considerarlos
como posibles caracteres o no (algún rango en concreto)?























¿Para qué buscar lo divino a la distancia? Se encuentra en todos los
objetos en torno de nosotros.
Powered by zxFortunes - It's free -
http://sourceforge.net/projects/zxfortune
Respuesta Responder a este mensaje
#3 Octavio Hernandez
12/10/2005 - 21:20 | Informe spam
Hola, Zephryn!

No estoy muy "ducho" en este tema, pero creo que el tema de la codificación
le afecta a él solo por el hecho de que utiliza ReadChars(), pero si usara
ReadByte() o ReadBytes(), que es lo que utilizaríamos para leer los bytes
"crudos" que componen el fichero, no afectaría.

Slds - Octavio

"Zephryn Xirdal" escribió en el mensaje
news:
Hola, Octavio.

Ya que estamos en el tema.

¿Qué codificación debo poner si quiero leer bytes en modo raw? Me refiero
a meter en un array del tipo byte *exactamente* lo que haya en el fichero,
sin interpretaciones de ningún tipo. Vamos el equivalente a meter en una
cadena de "unsigned char" lo leído mediante "fopen(<fich>,"rb"); del C de
toda la vida.

Es una duda que tengo desde hace mucho tiempo y que de momento no he
podido solventar, y creo yo que se trata de la solución al problema de
Luis.

En Wed, 12 Oct 2005 19:48:25 +0200, Octavio Hernandez
escribió:

Luis,

Creo que el problema está en la codificación de caracteres que utilizas.
¿Qué constructor utilizas para crear el BinaryReader? Hay una variante
en la
que se indica el sistema de codificación, y otra que utiliza por defecto
UTF-8.

Echale un vistazo a esto:

http://msdn.microsoft.com/library/d...stopic.asp

Slds - Octavio

"luis" escribió en el mensaje
news:eoOz%
Tengo este código:
fe.BaseStream.Seek(-128,SeekOrigin.End);

char []tag=fe.ReadChars(3);

Es decir, me coloco 128 bytes antes de un archivo y leo tres caracteres.
Sin
embargo me han pasado con algún archivo que la matriz no se llena y
queda
con longitud cero. Esto no es debido a que no hayan bytes ya que todos
los
archivos son grandes (de 1 mega para arriba) con lo que siempre se tiene
que
poder poner 128 bytes antes del final.

Con una matriz de bytes lo soluciono pero quiero saber por que no valen
siemrpe con la matriz de char. El problema supongo es que hay veces que
en
esas posiciones hay caracteres (con lo que va bien) y otras veces puede
haber cualquier byte. Si es así ¿en qué se basa c# para no considerarlos
como posibles caracteres o no (algún rango en concreto)?























¿Para qué buscar lo divino a la distancia? Se encuentra en todos los
objetos en torno de nosotros.
> Powered by zxFortunes - It's free -
http://sourceforge.net/projects/zxfortune
Respuesta Responder a este mensaje
#4 Zephryn Xirdal
12/10/2005 - 21:35 | Informe spam
En Wed, 12 Oct 2005 21:20:53 +0200, Octavio Hernandez
escribió:

Hola, Zephryn!

No estoy muy "ducho" en este tema, pero creo que el tema de la
codificación
le afecta a él solo por el hecho de que utiliza ReadChars(), pero si
usara
ReadByte() o ReadBytes(), que es lo que utilizaríamos para leer los bytes
"crudos" que componen el fichero, no afectaría.

Slds - Octavio



Ok, gracias.
Respuesta Responder a este mensaje
#5 luis
12/10/2005 - 23:00 | Informe spam
Creo el objeto mediante:
BinaryReader fe=new BinaryReader(fichero.OpenRead());

Siendo fichero de tipo FileInfo

"Octavio Hernandez" escribió en el mensaje
news:

Luis,

Creo que el problema está en la codificación de caracteres que utilizas.
¿Qué constructor utilizas para crear el BinaryReader? Hay una variante en


la
que se indica el sistema de codificación, y otra que utiliza por defecto
UTF-8.

Echale un vistazo a esto:




http://msdn.microsoft.com/library/d...stopic.asp

Slds - Octavio

"luis" escribió en el mensaje
news:eoOz%
> Tengo este código:
> fe.BaseStream.Seek(-128,SeekOrigin.End);
>
> char []tag=fe.ReadChars(3);
>
> Es decir, me coloco 128 bytes antes de un archivo y leo tres caracteres.
> Sin
> embargo me han pasado con algún archivo que la matriz no se llena y


queda
> con longitud cero. Esto no es debido a que no hayan bytes ya que todos


los
> archivos son grandes (de 1 mega para arriba) con lo que siempre se tiene
> que
> poder poner 128 bytes antes del final.
>
> Con una matriz de bytes lo soluciono pero quiero saber por que no valen
> siemrpe con la matriz de char. El problema supongo es que hay veces que


en
> esas posiciones hay caracteres (con lo que va bien) y otras veces puede
> haber cualquier byte. Si es así ¿en qué se basa c# para no considerarlos
> como posibles caracteres o no (algún rango en concreto)?
>
>
>
>
>
>
>
>
>
>
>
>
>
>


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida