Foros del Web » Programación para mayores de 30 ;) » .NET »

Archivos y conversión string<->byte

Estas en el tema de Archivos y conversión string<->byte en el foro de .NET en Foros del Web. Buenas, estoy en VB2008 volviéndome loco... a ver, me gustaría saber cómo se relacionan los métodos 'WriteAllText" y "WriteAllBytes", y sus respectivos para leer, en ...
  #1 (permalink)  
Antiguo 12/02/2009, 17:54
 
Fecha de Ingreso: mayo-2008
Mensajes: 42
Antigüedad: 16 años
Puntos: 0
Archivos y conversión string<->byte

Buenas, estoy en VB2008 volviéndome loco... a ver, me gustaría saber cómo se relacionan los métodos 'WriteAllText" y "WriteAllBytes", y sus respectivos para leer, en My.Computer.FileSystem.
Es que a la hora de escribir y leer obtengo cosas a veces iguales y a veces diferentes, pero en general en la conversión dejan de ser idénticos los archivos.... me explico con mi caso:

Quiero guardar texto con una imagen, todo junto en un mismo archivo. He encontrado unas funciones muy útiles para el tema de las imágenes, ya que realizan la conversión de una imagen a una matriz de bytes, y viceversa, y así lo hago todo por código. Estas son:

Código:
Shared Function Imagen_Bytes(ByVal Foto As Image) As Byte()
     If Not Foto Is Nothing Then
          Dim Codi As New IO.MemoryStream
          Foto.Save(Codi, Imaging.ImageFormat.Png)
          Return Codi.GetBuffer
     Else
          Return Nothing
     End If
End Function

Shared Function Bytes_Imagen(ByVal Foto As Byte()) As Image
     If Not Foto Is Nothing Then
          Dim Codi As New IO.MemoryStream(Foto)
          Dim resultado As Image = Image.FromStream(Codi)
          Return resultado
     Else
          Return Nothing
     End If
End Function
Bien, a la hora de grabar, obtengo la matriz de bytes a partir de la imagen. Pero como tengo también texto, y tengo que unir texto y una matriz de bytes, tengo que pasarlo todo a un mismo tipo. Entonces hago:
Código:
Dim Conv = New System.Text.ASCIIEncoding
Dim Cadena as String

Cadena = Conv.GetString(ArrayBytes)
Con lo que convierto el array de bytes en un string, usando una codificación ascii.
Bueno, pues ya haga lo que haga, si grabo con WriteAllBytes o con WriteAllText, o convierta de String a matriz de bytes, o viceversa, cuando leo, de cualquier manera, y vuelvo a convertir, de cualquier manera también, no consigo obtener exactamente la misma información, pues ahora cuando intento volver a formar la imagen me da un error, y eso no pasa si la matriz de bytes está bien.

Perdón por el rollo. Bueno, a ver si sabéis algo. Muchas gracias.

Salu00000010!!!
  #2 (permalink)  
Antiguo 12/02/2009, 21:08
 
Fecha de Ingreso: septiembre-2008
Mensajes: 68
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Archivos y conversión string<->byte

Saludos de antemano. Bueno lo que he entendido de tu consulta ya que está medio confusa y redundante, creo haber llegado a la conclusión que quieres que una imagen ( No especificaste si es en base a un archivo, bitMap, extraida de un PictureBox, etc ) convertirla a arreglo de bytes ademas de eso a ese arreglo de bytes que formaste en base a la imagen quieres añadirle un arreglo de bytes pero formado en base a una cadena, bueno si la imagen es en base a un archivo mi solución es la siguiente. Primero crear una variable matriz de bytes y almacenar el archivo de imagen de ahi.

'Haces el Import de la libreria de textos y codificaciones.

Imports System.Text

'Declaras la variable y almacenas el archivo

Dim ArrImage() As Byte = My.Computer.FileSystem.ReadAllBytes("Ruta de tu archivo en el disco duro")

'Declaras la variable y almacenas tu texto

Dim ArrText() As Byte = Encoding.ASCII.GetBytes("Mi texto")

'Declaras una variable para almacenar tus arreglos a uno solo

Dim MyArreglo(ArrImage.Length + AtrrText.Length - 1) as Byte

Luego de esto debes crear un un bucle que te permita almacenar los bytes de la imagen a este arreglo y cuando llegue al final dar un salto ( hacer que este byte marque cero que es lo mismo que null en VB ) y apartir de este byte nulo en adelante almacenar los bytes de tu cadena. De esta forma podras controlar con un método que extraiga los bytes hasta que marque el null e ir almacenando en una matriz y del byte nulo en adelante en otra matriz y hacer las respectivas conversiones a sus tipo de dato originales.

Dim MiNuevoArregloImage() As Byte
Dim MiNuevoArregloText() As Byte

My.Computer.FileSystem.WriteAllBytes("Ruta de almacenamiento en disco",MiNuevoArregloImage,False)

Dim MiTexto As String = Encoding.ASCII.GetString(MiNuevoArregloText)

Bueno esa seria la solución, en caso de no ser lo que buscabas entonces puedes tomarlo como algunos tips de manejo de archivos y arreglos de bytes.

Suerte

ATTE RealTMegalix
  #3 (permalink)  
Antiguo 13/02/2009, 11:09
 
Fecha de Ingreso: mayo-2008
Mensajes: 42
Antigüedad: 16 años
Puntos: 0
Respuesta: Archivos y conversión string<->byte

Bueno, he tardado en contestar porque estaba probando lo que dijiste, y tras un buen rato de pruebas puedo decir que me va perfecto, muchísimas gracias.
... emm ya te habrás dado cuenta de que sí, que era exactamente lo que buscaba, me expliqué de pena.
Lo único que he cambiado ha sido la codificación Ascii por Default y... bueno, lo del valor null como separador funciona bien en el caso de que el texto sea "normal", pero si guardas caracteres un tanto especiales, como muchos que se tienen al cargar otro archivo, entonces esos valores null no paran de aparecer y no sirven como delimitador. Además de que habría que coger el primero y cortar, porque en la imagen también hay muchos más.
Pero eso para los casos especiales, para el texto normal funciona, como he dicho. De todas formas prefiero poner unos delimitadores caseros de toda la vida y ahorrarme posibles problemas.

Buff, como me enrollo para cualquier cosa. En fín, que muchísimas gracias, va genial.

Salu00000010!!!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:56.