• Martes 30 de Abril de 2024, 03:16

Autor Tema:  Cómo Unir Partes De Un Mismo Archivo (Foto JPG)  (Leído 1875 veces)

ProgramadorVB

  • Nuevo Miembro
  • *
  • Mensajes: 10
    • Ver Perfil
Cómo Unir Partes De Un Mismo Archivo (Foto JPG)
« en: Miércoles 2 de Junio de 2010, 21:12 »
0
Hola amigos, cómo están, espero que muy bien.

Estoy modificando un proyecto, para descargar cualquier archivo en varias partes... para acelerar el proceso de descarga...

El tema es que luego de descargar las partes por separado... no puedo unirlo todo, en un archivo correcto... que en mi ejemplo es un JPG... ya he probado pero no logro dar con la tecla...

Espero que me puedan ayudar... publico aquí el proyecto, limpio de mis intentos de unión... para que se entienda mejor...

Por favor, necesito ayuda con esto, ya que me estoy volviendo  :wacko:   loco

Gracias de antemano...

Un saludo
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

ProgramadorVB

  • Nuevo Miembro
  • *
  • Mensajes: 10
    • Ver Perfil
Re: Cómo Unir Partes De Un Mismo Archivo (Foto JPG)
« Respuesta #1 en: Jueves 3 de Junio de 2010, 01:06 »
0
Hola, ya me respondieron... ésta es la solución:


Dim Parte1 As String, Parte2 As String, Parte3 As String
Open "C:Prueba.001" For Binary As #1
Parte1 = Space$(LOF(1))
Get #1, 1, Parte1
Close #1
Open "C:Prueba.002" For Binary As #1
Parte2 = Space$(LOF(1))
Get #1, 1, Parte2
Close #1
Open "C:Prueba.003" For Binary As #1
Parte3 = Space$(LOF(1))
Get #1, 1, Parte3
Close #1

Open "C:Prueba.jpg" For Binary As #1
Put #1, 1, Parte1 & Parte2 & Parte3
Close #1



Un saludo y gracias.

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: Cómo Unir Partes De Un Mismo Archivo (Foto JPG)
« Respuesta #2 en: Jueves 3 de Junio de 2010, 07:53 »
0
No es muy práctico ese método, porque a priori no sabes si tienes 3 o 20 partes.
Lo correcto sería que una función que utilizara un bucle...

en ódigo sería más o menos:
Fíjate que  tomamos los archivos del 1 en adelante y se pegan  todos en el archivo 0
Código: Visual Basic
  1.  
  2. Private Function RefundirArchivo(ByRef Rutas() As String) As String
  3.     Dim f1 As Integer, f2 As Integer
  4.     Dim b() As Byte, k As Long, n As Integer, t As Long
  5.  
  6.     On Local Error GoTo sale    '  típicamente un fallo con una ruta, un archivo no se pudo abrir, no existe,etc...
  7.     If (Not (Rutas)) <> -1 Then  ' la matriz tiene elementos ?
  8.         f1 = FreeFile: f2 = FreeFile
  9.         Open Rutas(0) For Binary As #f1
  10.         t = 1
  11.         For n = 1 To UBound(Rutas)
  12.             Open Rutas(n) For Binary As #f2  ' abrimos archivo uno a uno
  13.                 k = LOF(f2)                  ' nos informamos de su tamaño
  14.                 ReDim b(0 To k - 1)          ' reservamos memoria
  15.                 Get #f2, , b                 ' leemos origen
  16.                 Put #f1, t, b                ' pegamos en destino
  17.                 t = t + k                    ' actualizamos puntero de escritura
  18.             Close #f2                        ' cerramos archivo actual
  19.         Next
  20.         Erase b                              ' liberamos memoria
  21.         RefundirArchivo = Rutas(0)           ' si todo fue bien devolvemos la ruta del archivo resultante, si falló algo se devuelve una cadena vacía.
  22.     End If
  23. sale:
  24.     Close #f1, f2
  25. End Function
  26.  
  27.  
  28.  

Para que funciones correctamente se requiere ciertas condiciones... la mas obvia es:
* La matriz de rutas esté correctamente ordenada si las partes se unen en diferente orden ya sabes que podrá salir.
* El tamaño final del archivo no puede superar el tamaño de un long (2GB.)

Para probarlo: imginemos que tenemos un lote de archivos en la unidad c, que sellaman 'Mi archivo.jpg' y los siguientes en la forma 'Mi archivo-00x.jpg' donde x es un cifra del 1 al 9, queremos por tanto refundir esos archivos del 1 al 9 sobre el primero.. usando el evento click del formulario:
Código: Visual Basic
  1.  
  2. Private Sub Form_Click()
  3.     Dim r() As String, res As String, k as integer
  4.    
  5.     '  recopilación de las rutas...
  6.      ReDim r(0 To 9)
  7.     r(0) = "C:Mi archivo.jpg"
  8.     For k = 1 To 9
  9.         r(k) = "C:Mi archivo-00" & CStr(k) & ".jpg"
  10.     Next
  11.    
  12.     res = RefundirArchivo(r)           '   llamada a la función
  13.    
  14.    ' avisar del resultado
  15.      If res <> "" Then
  16.         MsgBox "Archivo refundido en el archivo: " & res
  17.     Else
  18.         MsgBox "Algo falló al refundir archivos..."
  19.     MsgBox
  20. End Sub
  21.  
  22.  
  23.  

p.d.: Adicionalmente el método que te señalan más arriba podría fallar, ya que utiliza caracteres para leer un archivo, un carácter se compone de 2 bytes, así cuando leas ficheros cuyo tamaño no sea par, fallará.... porque estarás pegando un byte más que desplazará a los de los siguientes archivos.
«Ma non troppo»
----> ModoVacaciones = False<----