Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

[SOLUCIONADO] Escribir binarios al final del archivo

Estas en el tema de Escribir binarios al final del archivo en el foro de Visual Basic clásico en Foros del Web. Hola a todos, mi duda es la siguiente... Tengo un archivo ya creado y deseo adicionarles bytes al final. Se que existe FOR Append, per ...
  #1 (permalink)  
Antiguo 10/03/2013, 11:18
Avatar de SPAWN3000  
Fecha de Ingreso: marzo-2008
Ubicación: Bogota
Mensajes: 858
Antigüedad: 16 años, 1 mes
Puntos: 15
Escribir binarios al final del archivo

Hola a todos, mi duda es la siguiente...
Tengo un archivo ya creado y deseo adicionarles bytes al final. Se que existe FOR Append, per no lo he logrado hacer funcionar con bytes.

Tengo este codigo que crea el archivo y escribe el contenido. Pero luego me llega una segunda trama de bytes que debo adicionar y no se como abrir nuevamente en modo bytes para adicion ar contenido. Mil gracias.
Código:
            ifreefile = FreeFile
            Open sFile For Binary Access Write As #ifreefile
            Put #ifreefile, sFile, getdatavar
            Close #ifreefile
  #2 (permalink)  
Antiguo 10/03/2013, 16:48
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 14 años, 5 meses
Puntos: 53
Respuesta: Escribir binarios al final del archivo

Hola, independientemente de que los datos sean binarios o no, al fin y al cabo TODO son unos y ceros, puedes hacerlo de este modo

Código vb:
Ver original
  1. ' Para Borrar Fichero y Grabar los Datos
  2.  Numero = FreeFile
  3.   Open Fichero For Output As #Numero
  4.   Print #Numero, Datos;
  5.   Close #Numero
  6.  
  7. ' Para No Borrar Fichero y Añadir los Datos
  8.  Numero = FreeFile
  9.   Open Fichero For Append As #Numero
  10.   Print #Numero, Datos;
  11.   Close #Numero

MUY IMPORTANTE, el ; Punto y Coma despues de Datos para que no te añada el CrLf
Saludos
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #3 (permalink)  
Antiguo 10/03/2013, 20:47
Avatar de SPAWN3000  
Fecha de Ingreso: marzo-2008
Ubicación: Bogota
Mensajes: 858
Antigüedad: 16 años, 1 mes
Puntos: 15
Respuesta: Escribir binarios al final del archivo

Bueno, primero muchas gracias por responder tan rapido y aprovecho apra comentarte lo que estoy intentando desarrollaro. Es un cliente vb6 y un servidor vb.net por socket. LA comunicacion y envio de archivos desde vb6 hasta vb.net funciona genial...pero no se que sucede con enaviar archivos desde vb.net hasta vb6... inicialmente cargada todo en cadenas tipo string, pero veia que algunos caracteres especiales se transformaban en signos de pregunta(ni idea). Asi que cambia tanto vb6 y vb.net a bytes...pense que con eso todo estaria arreglado pero nada...ya intentes un seguimiento super tedioso byte por byte y comparando archivos una y ottra vez hay una similitud de casi un 80% aprox. Pero algunos caracteres y trozos de cadenas se ven muy distintos...

Comparto parte del codigo vb6. Esta es la parte que recibe la primera trama de entrada...
Código vb:
Ver original
  1. ifreefile = FreeFile
  2.             Open sFile For Binary Access Write As #ifreefile
  3.             Put #ifreefile, 1, getdatavar
  4.             Close #ifreefile

Y esta parte tambien de vb6, recibe el resto de los paquetes relacionados al archivo y los adiciona a la primera parte:
Código vb:
Ver original
  1. ifreefile = FreeFile
  2.             Open sFile For Binary Access Write As #ifreefile
  3.             Put #ifreefile, FileLen(sFile), getdatavar
  4.             Close ifreefile

............hasta hay todo lo que fue, vb6 ahora esta la parte de vb.net:
Código vb:
Ver original
  1. Dim GrabAmount As Integer
  2.         Dim typeFile As String
  3.         Dim NameFile As String
  4.         Dim sSendByteLen As String
  5.        
  6.         'Esto define el tamaño de los paquetes
  7.        GrabAmount = 5000 'Bytes
  8.        typeFile = Right(FileName, Len(FileName) - InStrRev(FileName, "."))
  9.         NameFile = Right(FileName, Len(FileName) - InStrRev(FileName, "\"))
  10.         NameFile = Mid(NameFile, 1, Len(NameFile) - (Len(typeFile) + 1))
  11.         sSendByteLen = "[¹]"    'Esto le permite identificar si es un mensaje o un archivo
  12.        Debug.Print("SNDFile_Header>>" & sSendByteLen)
  13.         client.sendData(sSendByteLen)   'Aqui se envia la cabecera de archivo
  14.        LNFile = 0
  15.  
  16.         Using sr As New FileStream(tUtil.ObjConfig(0).param & FileName, FileMode.Open, FileAccess.Read)
  17.             If GrabAmount > sr.Length Then GrabAmount = sr.Length   'Si el tamaño por defecto del buffer supera el tamaño del archivo, se cambia
  18.            Dim count As Integer = GrabAmount
  19.             Dim buffer(count - 1) As Byte
  20.             count = sr.Read(buffer, 0, count)
  21.             LNFile = 0
  22.             Do Until count = 0
  23.                 LNFile = LNFile + count
  24.                 client.sendDataB(buffer)
  25.                 If (sr.Length - LNFile) <= GrabAmount Then  'Se cambia al tamaño de los bytes restantes de ser necesario.
  26.                    count = (sr.Length - LNFile)
  27.                     ReDim buffer(count - 1)
  28.                 End If
  29.                 count = sr.Read(buffer, 0, count)
  30.             Loop
  31.             sr.Close()
  32.         End Using

Se que le hace falta pulir muchas cosas, pero primero lo primero y es que al menos funcione....pero esta ha sido la espina en el costado, sin mencionar muchas mas cosas que he tenido que superar y ya esta es mi ultima etapa y parecia ser la mas sencilla pero me esta costando y no se si sera por el agotamiendo y la falta de sueño... . Seguiere en ello pero si podes darme una luz estare completamente en deuda contigo...Se que esta mal pegar y copiar codigos esperando que alguien mas lo revise por que total se debe aprender y descubrir por si mismo las cosas que es donde esta realmente el merito, pero me vi en la necesidad de acudir al foro de ya no poder mas... Mil gracias y saludos

Última edición por SPAWN3000; 10/03/2013 a las 21:05
  #4 (permalink)  
Antiguo 11/03/2013, 04:37
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 14 años, 5 meses
Puntos: 53
Respuesta: Escribir binarios al final del archivo

Hola, siento no poder ayudarte pero en el VB.NET nada de nada, así que tendrás que esperar a ver si alguien que conozca los dos lenguakjes te pueda echar un cabo.

Lo único que veo que esta mal en VB es lo siguiente

Put #ifreefile, FileLen(sFile), getdatavar

ya que con esto, machaca el último caracter del fichero, debería ser

Put #ifreefile, FileLen(sFile) + 1, getdatavar

fíjate que en el primer caso, cuando se supone que el fichero es de longitud Cero
estas haciendo:

Put #ifreefile, 1, getdatavar

A ver si es por ahí
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #5 (permalink)  
Antiguo 12/03/2013, 20:28
Avatar de SPAWN3000  
Fecha de Ingreso: marzo-2008
Ubicación: Bogota
Mensajes: 858
Antigüedad: 16 años, 1 mes
Puntos: 15
Respuesta: Escribir binarios al final del archivo

Hola que tal erbuson, si mira que ojo clinico tan acertado...exactamente encontre un problema con el ultimo caracter...El problema inicial ya fué solucionado, extrañamente tenia que ver con la maquina donde se estaba ejecutando... (Si me preguntan ni idea).

Pero mil gracias por todo, y la verdad tampoco soy el guru del .net...creo que me aproximo mas a otros lenguajes pero que por mis tareas del dia a dia he tenido que estar entre un mundo y otro...Aunque en teoria eso no es una buena practica por que al fin no eres experto ni en lo uno o lo otro. Pero si algun dia necesitas una mano sea con vb6, php, java, C#, vb.net, Optimización de procedimientos en base de datos o algo de CSS...

Con gusto!!. Saludos,

Etiquetas: final
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 02:45.