Buenas a todos, necesitaría crear un editor hexadecimal muy básico, no sé si este lenguaje será el mejor, pero es del único qu etengo conocimientos. El caso es que tengo que abrir un archivo de 250 mb y escribir siempre lo mismo, unos 10 mb de línea.
Estuve buscando por internet y encontré ejemplos pero no me dejan copiar y pegar, sólo modificarlo por pulsaciones y con SENDKEYS me tarda unos 30 o 40 minutos de reloj, cuando con un editor hexadecimal normal se copia y se pega en un instante.
Estoy perdido en este asunto, podría alguien hecharme una mano?
Gracias :)
Y porqué no usas un editor hexa ya hecho? Hay editores gratis...
Cual es el motivo por el cual debes/necesitas hacer uno?
Saludos!
Simplemente para hacer más completa la aplicación que estoy realizando y así no tener que recurrir a programas externos.
Bueno, aqui (http://sourceforge.net/projects/hexeditorvb/) tienes un editor hexa hecho en VB6.
Seguro puedes sacar ideas de ahí.
Saludos!
Ok, voy a echarle un vistazo gracias. ;-)
Ya lo ví y ya dí con la tecla, ahora el mproblema es que no puedo escribir en el archivo el byte null, es decir 00, en ASCII sería simplemnte con punto, pero no me lo pasa bien a hexadceimal.
Alguna idea?
Cita de: osmo83 en 5 Agosto 2014, 16:31 PM
el mproblema es que no puedo escribir en el archivo el byte null, es decir 00, en ASCII sería simplemnte con punto
No. El byte 0x00 (ó &H00)
no es un punto. Se
representa como un punto, porque es un caracter
no imprimible.
Si quieres escribir un byte nulo (0x00) en el archivo, lo escribes, pero para
verlo necesitarás abrir el archivo con un editor hexadecimal... :P
Saludos!
Ok, ahora el problema que tengo es que no me copia en la posición que yo quiero del archivo, o necesito que llega hasta la posición 7C0020 que ne decimal sería 130023936, pero cuando pongo el que escriba ahí no escribe nada, sin embargo si l edoy algún valor más bajo, que sé yo 400000 lo escribe sin problema, así que debe ser una limitación de la sentencia put, vamos digo yo.
Ejemplo:
Private Sub Command1_Click()
On Error GoTo error_Sub
'Array que contendrá los bytes del archivo es decir los datos
Dim Data As Byte
'Variable Para el tamaño del archivo ( luego se usa para el Redim )
Dim fLen As Long
'Abrimos el archivo en modo binario de solo lectura (Binary Lock Read)
Open "C:\Users\Moisés\Desktop\prueba\archivo1.bin" For Binary Lock Read As 1
'creamos un archivo para guardar los datos ( Binary Access Write )
Open "C:\Users\Moisés\Desktop\prueba\archivo2.bin" For Binary Access Write As 2
'Redimiensionamos el array al tamaño del archivo
fLen = FileLen("C:\Users\Moisés\Desktop\prueba\archivo1.bin")
ReDim Data(fLen) As Byte
'Leemos el archivo entero y lo almacenamos en el array
Get #1, , Data
'Escribimos los bytes del array anterior, en el nuevo archivo ( archivo 2 )
Put #2, 130023936, Data
'Cerramos los dos archivos
Close
MsgBox "archivo copiado", vbInformation
Exit Sub
error_Sub:
MsgBox Err.Description, vbCritical
End Sub
Alguna idea?
Cita de: osmo83 en 6 Agosto 2014, 16:54 PM
Alguna idea?
Revisa la MSDN de VB6 sobre las instrucciones OPEN y PUT.
En especial la parte donde trabajas con archivos en modo binary y cuando escribes datos en los mismos (opcion SIZE de Open).
Saludos!
Ok, lo buscaré, pero podrías ponerme un código de ejemplo? es que si no fijo que no doy con la tecla.
La MSDN tiene ejemplos...
Saludos!
Según la MSDN no puedo abrir archivos superiores a 32.000 bytes, ¿habría alguna forma de enfocarlo de otro modo para que lo leyera? Es que he visto gente que trabaja con archivos mucho más pesados pero no sé cómo lo hacen.
Cita de: osmo83 en 7 Agosto 2014, 08:48 AM
Según la MSDN no puedo abrir archivos superiores a 32.000 bytes
No has entendido. El tamaño de un
registro tiene ese tamaño maximo. De todas formas, no tienes que trabajar con registros cuando abres en modo binary (el parametro se ignora).
Te repito, si miras el codigo del editor hexa, verás cómo trabaja con archivos de tamaño arbitrario.
Sólo tienes que revisar el código...
Saludos!
Gracias, ya lo solucioné, al final lo que hice fue dividir el archivo original en varios de menor tamaño.
Gracias por la yuda qu eme has prestado, lo he ido comprendiendo cada vez mejor.