La Web del Programador: Comunidad de Programadores
 
    Pregunta:  20541 - TOMAR INFORMAION HEXADECIMAL DE UN ARCHIVO
Autor:  Juan Carlosa
Hola que tal mi problema es que quiero abrir un archivo de manera hexadecimal para trabajar con el de esta manera(hexadecimal).
Para poder cambiar informacion,intoducir nueva ,etc .Lo ge pasa es que no se como realizarlo desde visual basic y queria saber si alguen sabia como puedo hacerlo o si conosian algun tutrorial espesifico para esta tarea desde ya muchas grasias

  Respuesta:  Carlos Melgar
Estos son los comandos que se usan para ficheros binarios.
a) Para abrir el fichero, debes hacer un OPEN... BINARY.
Ej: Open "Fichero" For Binary As #10 'fichero binario

b) Para cerrar el fichero debes usar el comando CLOSE
Ej: Close #10

c) Para colocarse en cualquier parte del fichero, usar el SEEK
IMPORTANTE: El primer byte del fichero es el 1, no el 0
Ej: Seek #10, 1 'Va al principio del fichero
Ej: Seek #10, LOF(10) 'Va al final del fichero

d) Para leer usar el comando GET (el primer parametro es el nº fichero,
el siguiente es el nº de byte [si haces un SEEK antes, no lo necesitas]
y el ultimo la cadena, numero,... donde se meten los datos leidos):
Ej: Get #10, , datos

e) Para escribir usar el comando PUT (el primer parametro es el nº
de fichero, el siguiente es el nº de byte [si haces un SEEK antes, no lo necesitas] y el ultimo la cadena, numero,... que se va a grabar):
Ej: Put #10, , datos

Otras funciones que pueden ser utiles:
LOC(nº fichero) : Posicion actual dentro del fichero (nº byte)
LOF(nº fichero): Tamaño del fichero en bytes
EOF(nº fichero): Para saber si llega al final del fichero.
FREEFILE( ): Devuelve el siguiente nº de archivo valido disponible.

Otras cosas:
Para las cadenas, es mejor usar el tipo STRING * nº , en vez de solo
STRING (STRING * nº tiene estas dos ventajas: si la cadena es muy
corta, los ultimos caracteres los rellena con NULL (el ASCII 0) y si la
cadena es muy larga, los ultimos caracteres los ignora).
Los otros tipos (INTEGER, LONG,...) siempre tienen el mismo tamaño.

Ejemplo:
Dim fich as Integer 'ID del fichero abierto con OPEN
Dim Puntos as Long '4 bytes
Dim Nombre as String * 25 ' 25 bytes
dim strMemo as String 'datos que se meten en la listbox

fich = FreeFile
'En vez de meter un nº 'a pelo', se usa FreeFile para evitar errores
Open "hiscore.dat" For Binary as #fich
'-- (al abrir el fichero esta en el byte 1 y no necesitas un Seek #fich, 1)
'Lee los records del fichero
'Aqui se supone que los datos estan guardados de esta forma:
' Nombre, puntos, nombre, puntos,... (sin 'basura' en medio)
Do Until EOF(fich)
Get #fich, , Nombre 'Lee 25 bytes
Get #fich, , Puntos 'Lee 4 bytes
strMemo = Replace(Nombre, Chr(0), ' ' ) 'Cambia nulos por espacios
'puntos alineados a la derecha
strMemo = strMemo & " " & Format(Puntos, "@@@@@@@@@@")
'Va llenando la listbox
Form1.Listbox1.AddItem strMemo
Loop
'Cierra el fichero
Close #fich


  Respuesta:  danibc
Navegando por la red encontré hace tiempo este programa realizado en VB que hace lo que tú pides. QUE QUEDE CLARO QUE NO ES MÍO, OSEA, QUE TODO EL MERITO ES DEL QUE LO HIZO, yo solo lo encontré (no me acuerdo donde)

Espero que te sirva

Un saludo

Descargar