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

De Archivo a Binario

Estas en el tema de De Archivo a Binario en el foro de Visual Basic clásico en Foros del Web. Hola: Necesito alguna idea o funcion, la cual me permita leer cualquier archivo, y que me devuelva la matriz binaria de ese archivo. A lo ...
  #1 (permalink)  
Antiguo 16/05/2005, 12:18
Avatar de Fann_Lavigne  
Fecha de Ingreso: diciembre-2004
Mensajes: 622
Antigüedad: 19 años, 4 meses
Puntos: 12
De Archivo a Binario

Hola:

Necesito alguna idea o funcion, la cual me permita leer cualquier archivo, y que me devuelva la matriz binaria de ese archivo. A lo que voy es que quiero leer por ejemplo una imagen JPG y que me devuelva sus 0's y sus 1's de esa imagen. Alguien me puede ayudar?
__________________
"Entre Mas Brillante Es Una Mente, Tiene Que Luchar Contra Demonios Internos Mas Poderosos"
[email protected]
  #2 (permalink)  
Antiguo 22/05/2005, 15:50
Avatar de Jad-Neo  
Fecha de Ingreso: octubre-2004
Mensajes: 344
Antigüedad: 19 años, 6 meses
Puntos: 0
Usa esta función

Estas instrucciones ya se las había dado a VisualGuayavo:

Function CargarArch (Dir As String) As String
Static tmpStr$, Bytes As Byte, fNum%, i&
fNum = FreeFile(2)
Open Dir For Binary Access Read As #fNum
For i = 1 To FileLen (Dir)
Get #fNum, i, Bytes
tmpStr = tmpStr & ChrB (Bytes)
DoEvents
Next i
CargarArch = tmpStr
End Function

Esta funcion te devuelve la matriz de bytes del archivo que especifiques en Dir. No intentes poner la matriz en un TextBox porque no te aparecerían varios caractéres. Si no te funciona mandame un mensaje privado para ver que pasa. No leemos.

NOTA: Si el archivo es de 500 KB o más, se puede tardar bastante.

Última edición por Jad-Neo; 22/05/2005 a las 15:54 Razón: Correción
  #3 (permalink)  
Antiguo 23/05/2005, 02:28
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por Fann_Lavigne
Hola:

Necesito alguna idea o funcion, la cual me permita leer cualquier archivo, y que me devuelva la matriz binaria de ese archivo. A lo que voy es que quiero leer por ejemplo una imagen JPG y que me devuelva sus 0's y sus 1's de esa imagen. Alguien me puede ayudar?
Abrir en modo binario es querer decir que se abre un archivo compuesto enteramente por bytes, y que no tiene un EOF con un valor determinado, sino que es el sistema operativo el que lo marca (¿sino como sabrías el final del archivo?).

En cualquier caso son bytes normales como cualquier otro. Si quieres obtener sus 0 y 1 (a saber para qué...) simplemente coge cada byte y lo pasas a binario haciendo las divisiones entre 2:

13 / 2 = 6 r 1
6 / 2 = 3 r 0
3 / 2 = 1 r 1

Binario: 1101 Tienes que coger el último cociente, y luego los restos hacia atrás.
  #4 (permalink)  
Antiguo 23/05/2005, 03:03
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por Jad-Neo
Estas instrucciones ya se las había dado a VisualGuayavo:

Function CargarArch (Dir As String) As String
Static tmpStr$, Bytes As Byte, fNum%, i&
fNum = FreeFile(2)
Open Dir For Binary Access Read As #fNum
For i = 1 To FileLen (Dir)
Get #fNum, i, Bytes
tmpStr = tmpStr & ChrB (Bytes)
DoEvents
Next i
CargarArch = tmpStr
End Function

Esta funcion te devuelve la matriz de bytes del archivo que especifiques en Dir. No intentes poner la matriz en un TextBox porque no te aparecerían varios caractéres. Si no te funciona mandame un mensaje privado para ver que pasa. No leemos.

NOTA: Si el archivo es de 500 KB o más, se puede tardar bastante.
Tardará bastante porque no son maneras... Un tipo "string" de VB es realmente un vector de bytes dinámico. Cada vez que añades un byte (o sea lo haces 500 * 1024 = 512000 veces), tiene que alojar memoria para ello (no sé exactamente su sistema). Y como has dicho, abriendo archivos más o menos grandes te puedes morir...

En cambio, así hace lo que pides y instantáneo:

Código:
Type Fichero
    Datos() As Byte
    Tamaño As Long
End Type

Function CargarFichero(ByVal Ruta As String) As Fichero
    Dim Datos_() As Byte
    Dim Tamaño_ As Long
    
    Dim fd As Integer
    fd = FreeFile
    
    Open Ruta For Binary Access Read As #fd
    Tamaño_ = FileLen(Ruta)
    ReDim Datos_(Tamaño_)
    Get #fd, , Datos_()
    Close #fd
    
    CargarFichero.Datos = Datos_
    CargarFichero.Tamaño = Tamaño_
End Function
Lo metes en un módulo y a volar. Crea un fichero que ocupe un mega o más y pruébalo con:

Código:
Dim Ejemplo As Fichero

Ejemplo = CargarFichero("C:\Adios.txt")

MsgBox "Ya está, ¿rápido?"
Verás que la carga es instantánea.
  #5 (permalink)  
Antiguo 23/05/2005, 13:27
Avatar de Developer9
(Desactivado)
 
Fecha de Ingreso: abril-2005
Ubicación: Mi Ecuador del alma
Mensajes: 4.196
Antigüedad: 19 años
Puntos: 47
Visiman!!!
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:47.