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 |