Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: shaggikpo en 8 Noviembre 2009, 03:22 am



Título: Crear Downloader?
Publicado por: shaggikpo en 8 Noviembre 2009, 03:22 am
El tema es que estoy haciendo un downloader que lee la lista de archivos a descargar de un archivo ini pero me quede trancado en la parte donde leo el archvio ini por secciones usando un bucle for:
Código
  1. Sub Bajar()
  2. Dim i As Long
  3. FILES = LeerIni("FILES", "Count", TEMP & "\" & nomArchivo)
  4.  
  5. For i = 1 To FILES
  6.    FILE = "file" & i
  7.    Direccion = LeerIni(FILE, "url", TEMP & "\" & nomArchivo)
  8.    Descr = LeerIni(FILE, "descr", TEMP & "\" & nomArchivo)
  9.    Checksum = LeerIni(FILE, "newchecksum", TEMP & "\" & nomArchivo)
  10.    LocalFile = LeerIni(FILE, "localversion", TEMP & "\" & nomArchivo)
  11.    Comprimido = LeerIni(FILE, "compressed", TEMP & "\" & nomArchivo)
  12.    List1.ListItems.Add = Descr
  13.  
  14.    'Download (Direccion)
  15. Next
  16.  
  17. End Sub
COmo puedo hacer para almacenar en alguna varible estos datos y despues leerlos.
Es decir ya que cada ves que se recorre el bucle las variables son sobreescritas


Título: Re: Crear Downloader?
Publicado por: BlackZeroX en 8 Noviembre 2009, 03:38 am
solo se me ocurre un metodo con clases, pero es algo enredado si te lo explico pero aun asi haber si te sirve xP

Una Clase con las siguientes variables:


    IDClass' Este seria el ID de la clase algo asi como el md5 de algo, mas no del archivo descrito por "File & i"
    Direccion
    Descr
    Checksum
    LocalFile
    Comprimido

Despues declaras las propiedades Get y Let de la clase respectiva )
Para el uso al principio de tu programa cargas TODO el INI en las dichosas clases (Que se crean apartir de una mtriz tipo clase)
Despues haces lo que te plasca con tu archivo ini, al dado caso el archivo ya estara cargado en el programa en las dichas clases.
De esta forma si modificas el ini puedes obtar por obtener la configuracion anterior que se cargo en el archivo ini.


Título: Re: Crear Downloader?
Publicado por: shaggikpo en 8 Noviembre 2009, 04:08 am
GRacias por responer d tan rapido.
Podrias poner un ejemplo, es que con este prgrama estoy bastante liado ya, aun me queda terminar el CRCChechsum y lo demas.


Título: Re: Crear Downloader?
Publicado por: shaggikpo en 9 Noviembre 2009, 02:44 am
Creo que ya lo he solucionado:
Cree un Array asi:

Código
  1. Private Type Lista
  2.    Direccion As String
  3.    Descr As String
  4.    Checksum As String
  5.    LocalFile As String
  6.    Destino As String
  7.    Comprimido As String
  8. End Type
  9. Dim Down() As Lista
  10. 'Y lo lleno asi
  11. Sub Obtener_Lista()
  12. Dim i As Long
  13. FILES = LeerIni("FILES", "Count", TEMP & "\" & nomArchivo)
  14. ReDim Preserve Down(1 To FILES)
  15. For i = 1 To FILES
  16.    FILE = "file" & i
  17.    Down(i).Direccion = LeerIni(FILE, "url", TEMP & "\" & nomArchivo)
  18.    Down(i).Descr = LeerIni(FILE, "descr", TEMP & "\" & nomArchivo)
  19.    Down(i).Checksum = LeerIni(FILE, "newchecksum", TEMP & "\" & nomArchivo)
  20.    Down(i).LocalFile = LeerIni(FILE, "localversion", TEMP & "\" & nomArchivo)
  21.    Down(i).Comprimido = LeerIni(FILE, "compressed", TEMP & "\" & nomArchivo)
  22.    List1.ListItems.Add = Down(i).Descr
  23.    'Download (Direccion)
  24. Next
  25.  
  26. End Sub


Título: Re: Crear Downloader?
Publicado por: danicasasm en 10 Noviembre 2009, 05:33 am
Una variante podria ser esta:
Código
  1. Private Type Lista
  2.    Direccion As String
  3.    Descr As String
  4.    Checksum As String
  5.    LocalFile As String
  6.    Destino As String
  7.    Comprimido As String
  8. End Type
  9.  
  10. dim Coleccion as new Collection
  11. dim Datos as Lista
  12.  
  13. Dim Down() As Lista
  14. 'Y lo lleno asi
  15. Sub Obtener_Lista()
  16. Dim i As Long
  17. FILES = LeerIni("FILES", "Count", TEMP & "\" & nomArchivo)
  18.  
  19. For i = 1 To FILES
  20.    FILE = "file" & i
  21.    Datos.Direccion = LeerIni(FILE, "url", TEMP & "\" & nomArchivo)
  22.    Datos.Descr = LeerIni(FILE, "descr", TEMP & "\" & nomArchivo)
  23.    Datos.Checksum = LeerIni(FILE, "newchecksum", TEMP & "\" & nomArchivo)
  24.    Datos.LocalFile = LeerIni(FILE, "localversion", TEMP & "\" & nomArchivo)
  25.    Datos.Comprimido = LeerIni(FILE, "compressed", TEMP & "\" & nomArchivo)
  26.    List1.ListItems.Add = Datos.Descr
  27.    'Download (Direccion)
  28.  
  29.    Coleccion.add Datos
  30. Next
  31.  
  32.  



Título: Re: Crear Downloader?
Publicado por: BlackZeroX en 10 Noviembre 2009, 06:45 am
@danicasasm

Es una vaiante que ocuparia mas recursos de procesador al momento de buscar un dicho registro con la instruccion  "each".

Aqui dejo algo del codigo que posteo el autor de este hilo a como yo lo haria:


OJO son dos funciones alternativas usar solo una segun se desee:

Código
  1.  
  2.  
  3. Private Type Lista
  4.    Direccion                   As String
  5.    Descr                       As String
  6.    Checksum                    As String
  7.    LocalFile                   As String
  8.    Destino                     As String
  9.    Comprimido                  As String
  10. End Type
  11.  
  12. Dim Down()                      As Lista
  13.  
  14. ' //    Get_List devuelve la cantidad de registros cargados o anidados.
  15. ' //---------------------------------------------------------------------
  16. ' //    NRegToADD   = LeerIni("FILES", "Count", TEMP & "\" & nomArchivo)
  17. ' //    Structr     = Structr
  18. ' //    RegCon      = True/False
  19. Public Function Get_List(ByVal NRegToADD As Long, ByRef Structr() As Lista, ByVal RegCon As Boolean) As Long
  20. Dim I                               As Long
  21. Dim Salto                           As Boolean
  22. Dim CantRegEx                       As Long
  23.  
  24.    If NRegToADD <= 0 Then Salto = True                             ' //    Se agregara algo?
  25.    If Salto = False Then
  26.        If RegCon And Not (Not (Structr) = -1) Then                 ' //    Se continua o se resetea? y esta inicialisada la matriz?
  27.            CantRegEx = UBound(Structr) - LBound(Structr)           ' //    Cantidad de Registros actuales
  28.            ReDim Preserve Structr(CantRegEx + NRegToADD)           ' //    Se continua
  29.        Else
  30.            ReDim Structr(NRegToADD - 1)                            ' //    Se Resetea
  31.        End If
  32.        For I = LBound(Structr) To UBound(Structr)                  ' //    Se inicia en 0 pero aun asi uso lbound()
  33.            File = "file" & I
  34.            Structr(I).Direccion = LeerIni(File, "url", TEMP & "\" & nomArchivo)
  35.            Structr(I).Descr = LeerIni(File, "descr", TEMP & "\" & nomArchivo)
  36.            Structr(I).Checksum = LeerIni(File, "newchecksum", TEMP & "\" & nomArchivo)
  37.            Structr(I).LomocalFile = LeerIni(File, "localversion", TEMP & "\" & nomArchivo)
  38.            Structr(I).Comprimido = LeerIni(File, "compressed", TEMP & "\" & nomArchivo)
  39.        Next
  40.        Get_List = I                                                ' //    Se devuelve la cantidad de registros cargados
  41.    End If
  42. End Function
  43.  
  44.  
  45. ' //    Get_List devuelve la cantidad de registros cargados o anidados.
  46. ' //---------------------------------------------------------------------
  47. ' //    strfile     = TEMP & "\" & nomArchivo
  48. ' //    Structr     = Structr
  49. ' //    RegCon      = True/False
  50. Public Function Get_ListFromFileIni(strFile As String, ByRef Structr() As Lista, ByVal RegCon As Boolean) As Long
  51. Dim I                               As Long
  52. Dim Salto                           As Boolean
  53. Dim CantRegEx                       As Long
  54. Dim NRegToADD                       As Long
  55.  
  56.    NRegToADD = LeerIni("FILES", "Count", strFile)                  ' //    cargamos la cantidad de registros a cargar
  57.    If NRegToADD <= 0 Then Salto = True                             ' //    Se agregara algo?
  58.    If Salto = False Then
  59.        If RegCon And Not (Not (Structr) = -1) Then                 ' //    Se continua o se resetea? y esta inicialisada la matriz?
  60.            CantRegEx = UBound(Structr) - LBound(Structr)           ' //    Cantidad de Registros actuales
  61.            ReDim Preserve Structr(CantRegEx + NRegToADD)           ' //    Se continua
  62.        Else
  63.            ReDim Structr(NRegToADD - 1)                            ' //    Se Resetea
  64.        End If
  65.        For I = LBound(Structr) To UBound(Structr)                  ' //    Se inicia en 0 pero aun asi uso lbound()
  66.            File = "File" & I
  67.            Structr(I).Direccion = LeerIni(File, "url", strFile)
  68.            Structr(I).Descr = LeerIni(File, "descr", strFile)
  69.            Structr(I).Checksum = LeerIni(File, "newchecksum", strFile)
  70.            Structr(I).LomocalFile = LeerIni(File, "localversion", strFile)
  71.            Structr(I).Comprimido = LeerIni(File, "compressed", strFile)
  72.        Next
  73.        Get_ListFromFileIni = I                                     ' //    Se devuelve la cantidad de registros cargados
  74.    End If
  75. End Function
  76.  
  77.  
  78.  

Dulces Lunas!ˇ.