elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  ¿Como optimizar la apertura de archivos en Binario?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿Como optimizar la apertura de archivos en Binario?  (Leído 2,512 veces)
tkows

Desconectado Desconectado

Mensajes: 82


Ver Perfil
¿Como optimizar la apertura de archivos en Binario?
« en: 3 Enero 2008, 15:09 pm »

Hola!

Estoy haciendo un programa y en un momento dado necesito acceder y abrir un archivo en modo binario, el inconveniente es que tarda un gran tiempo y bastantes recursos en abrirlo... La cosa es saber... ¿Como podría optimizarlo? El code que uso es el siguiente:

Código
  1. Dim var As String * 60000
  2. data = ""
  3. var = ""
  4. Open archivo For Binary As #1
  5. Do While Not EOF(1)
  6.  
  7. Get #1, , var
  8.  
  9. data = data & var
  10. data = Trim(data)
  11.  
  12. Loop
  13. Close #1


¿Se puede optimizar? ¿Se puede hacer de otro método más rápido?

Salu2.
Gracias


En línea

foobar

Desconectado Desconectado

Mensajes: 47


Ver Perfil
Re: ¿Como optimizar la apertura de archivos en Binario?
« Respuesta #1 en: 3 Enero 2008, 15:48 pm »

Código:
Dim btData() As Byte
Dim sData$

Open archivo For Binary As #1

ReDim btData(LOF(1)) As Byte

Get #1,  1, btData

sData = StrConv(btData, vbUnicode)

Close #1


En línea

tkows

Desconectado Desconectado

Mensajes: 82


Ver Perfil
Re: ¿Como optimizar la apertura de archivos en Binario?
« Respuesta #2 en: 3 Enero 2008, 16:23 pm »

Citar
Gracias! Lo pruebo y os cuento...

Salu2.

EDITO: He probado el code pero no he logrado hacerlo funcionar correctamente. Más información acerca de lo que hago, una vez abierto y cargado el archivo en una variable lo que hago es pasarla por una función que digamos "la cifra" y lo uso de la siguiente forma:

Código
  1. Dim btData() As Byte
  2. Dim sData$
  3.  
  4. Open archivo For Binary As #1
  5.  
  6. ReDim btData(LOF(1)) As Byte
  7.  
  8. Get #1,  1, btData
  9.  
  10.  
  11. sData = StrConv(btData, vbUnicode)
  12. sData=enc(sData)      ' "enc" es la función...
  13.  
  14. Close #1
  15.  

Pero se ve que se queda en un bucle infinito... :S ¿Que es lo que pasa? ¿Será problema de la función?

Salu2.
« Última modificación: 3 Enero 2008, 16:45 pm por tkows » En línea

nhaalclkiemr


Desconectado Desconectado

Mensajes: 1.678


Máximo exponente 9DB9F1AEED2FADBDE 997BBE20FEDA92


Ver Perfil WWW
Re: ¿Como optimizar la apertura de archivos en Binario?
« Respuesta #3 en: 3 Enero 2008, 22:37 pm »

ve linea por linea con el F8 en modo depuracion y asi ya ves las lineas en las que se repite...

Saludos ;)
En línea

StasFodidoCrypter 1.0 - 100% (old)
StasFodidoCrypter 2.0 - 85% (deserted)
Fire AV/FW-Killer - 97% (deserted)
R-WlanXDecrypter 1.0- 100%
cobein


Desconectado Desconectado

Mensajes: 759



Ver Perfil WWW
Re: ¿Como optimizar la apertura de archivos en Binario?
« Respuesta #4 en: 3 Enero 2008, 23:22 pm »

Para incrementar la velocidad tendrias que usar API (CreateFile, ReadFile , etc.) y no leer el contenido completo del archivo sino que en chunks (multiplos de 8 bytes) es mas rapido a mi entender.
En línea

http://www.advancevb.com.ar
Más Argentino que el morcipan
Aguante el Uvita tinto, Tigre, Ford y seba123neo
Karcrack es un capo.
tkows

Desconectado Desconectado

Mensajes: 82


Ver Perfil
Re: ¿Como optimizar la apertura de archivos en Binario?
« Respuesta #5 en: 4 Enero 2008, 01:31 am »

Ya he encontrado el problema. No es problema del código de apertura del archivo, es problema de la función de cifrado que le cuesta muchísimo... (Recorrer 60.000 caracteres no debe ser rápido xD). Alguna idea para otro "algoritmo" ?  :-\ :-\
Os dejo el código que utilizo:

cifrar:
Código
  1. Function enc(ByVal S As String, ByVal P As String) As String
  2. Dim I As Long, R As String
  3. Dim C1 As Integer, C2 As Integer
  4. R = ""
  5. If Len(P) > 0 Then
  6. For I = 1 To Len(S)
  7. C1 = Asc(Mid(S, I, 1))
  8. If I > Len(P) Then
  9. C2 = Asc(Mid(P, I Mod Len(P) + 1, 1))
  10. Else
  11. C2 = Asc(Mid(P, I, 1))
  12. End If
  13. C1 = C1 + C2 + 64
  14. If C1 > 255 Then C1 = C1 - 256
  15. R = R + Chr(C1)
  16. Next I
  17. Else
  18. R = S
  19. End If
  20. enc = R
  21.  
  22. End Function
  23.  

descifrar:

Código
  1. Function des(ByVal S As String, ByVal P As String) As String
  2. Dim I As Long, R As String
  3. Dim C1 As Integer, C2 As Integer
  4. R = ""
  5. If Len(P) > 0 Then
  6. For I = 1 To Len(S)
  7. C1 = Asc(Mid(S, I, 1))
  8. If I > Len(P) Then
  9. C2 = Asc(Mid(P, I Mod Len(P) + 1, 1))
  10. Else
  11. C2 = Asc(Mid(P, I, 1))
  12. End If
  13. C1 = C1 - C2 - 64
  14. If Sgn(C1) = -1 Then C1 = 256 + C1
  15. R = R + Chr(C1)
  16. Next I
  17. Else
  18. R = S
  19. End If
  20. des = R
  21. End Function
  22.  

¿Cómo hacer un "codificado" más rápido?

Salu2.

PD: El código de cifrado no es mio, lo encontré en Internet, lo revisé y vi que me servía para lo que quería hacer...
En línea

foobar

Desconectado Desconectado

Mensajes: 47


Ver Perfil
Re: ¿Como optimizar la apertura de archivos en Binario?
« Respuesta #6 en: 4 Enero 2008, 05:31 am »

Usando matriz de byte el código queda absolutamente optimizado. Los Strings son lentos y no son apropiados para operaciones que requieren mucho procesamiento.

El siguiente código lee los datos del archivo a una matriz de Byte, luego cifra los datos modificando el valor de cada byte con un algoritmo sencillo y lineal, y por último convierte a String los datos cifrados.

Para descifrar, hay que convertir los datos a matriz de Byte. Ejemplo:

Código
  1. Dim btData() As Byte
  2. Dim sString$, sDecrypt$
  3.  
  4. sString = "BRdTYTQ@QRG^"
  5.  
  6. btData = StrConv(sString, vbFromUnicode)
  7.  
  8. sDecrypt = Decrypt(btData)
  9.  
  10. Debug.Print sDecrypt
  11.  

Código
  1. Sub EncryptFile(Source As String)
  2.  Dim btData() As Byte
  3.  Dim sEnc$
  4.  
  5.  Open Source For Binary As #1
  6.  
  7.  ReDim btData(LOF(1)) As Byte
  8.  
  9.  Get #1,  1, btData
  10.  
  11.  sEnc = Encrypt(btData)
  12.  
  13.  Close #1
  14. End Sub
  15.  
  16. Function Encrypt(pData) As String
  17.  Encrypt = Crypto(pData, True)
  18. End Function
  19.  
  20. Function Decrypt(pData) As String
  21.  Decrypt = Crypto(pData, False)
  22. End Function
  23.  
  24. Function Crypto(pData, Optional bEncrypt As Boolean = True) As String
  25.  Dim iFlag%
  26.  Dim i&, lLen&
  27.  
  28.  lLen = UBound(pData)
  29.  
  30.  If (bEncrypt) Then iFlag = -1 Else iFlag = 1
  31.  
  32.  For i = 0 To lLen
  33.    pData(i) = pData(i) + ((i + (i Mod lLen) + 17) * iFlag)
  34.  Next
  35.  
  36.  Crypto = StrConv(pData, vbUnicode)
  37. End Function
  38.  
  39.  

Saludos.
En línea

tkows

Desconectado Desconectado

Mensajes: 82


Ver Perfil
Re: ¿Como optimizar la apertura de archivos en Binario?
« Respuesta #7 en: 4 Enero 2008, 13:16 pm »

Muchas gracias Seykron. Voy a probarlo y ya te cuento.

Gracias también por la explicación de las strings/matrices de bytes. De ahora en adelante intentaré usar matrices  ;D

Salu2 y gracias!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[C][?] Problema apertura de archivos
Programación C/C++
Oblivi0n 3 2,604 Último mensaje 1 Marzo 2011, 12:39 pm
por Garfield07
Ayuda los modos de apertura de archivos en C.
Programación C/C++
theluigy13etv 6 6,707 Último mensaje 23 Diciembre 2011, 16:28 pm
por Sagrini
Duda archivos abiertos en formato binario
Programación C/C++
cazagavilan 0 1,499 Último mensaje 17 Abril 2012, 06:05 am
por cazagavilan
Apertura de archivos .msg
Software
Mediatek 1 2,006 Último mensaje 9 Abril 2018, 11:39 am
por bettu
Duda con archivos .dat y decompilar binario
Ingeniería Inversa
elzh9003 9 4,752 Último mensaje 12 Enero 2020, 12:11 pm
por xor.pt
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines