Programación General > Visual Basic 6.0 e inferiores

 Cómo Unir Partes De Un Mismo Archivo (Foto JPG)

(1/1)

ProgramadorVB:
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

ProgramadorVB:
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:
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 --- Private Function RefundirArchivo(ByRef Rutas() As String) As String    Dim f1 As Integer, f2 As Integer    Dim b() As Byte, k As Long, n As Integer, t As Long     On Local Error GoTo sale    '  típicamente un fallo con una ruta, un archivo no se pudo abrir, no existe,etc...    If (Not (Rutas)) <> -1 Then  ' la matriz tiene elementos ?        f1 = FreeFile: f2 = FreeFile        Open Rutas(0) For Binary As #f1        t = 1        For n = 1 To UBound(Rutas)            Open Rutas(n) For Binary As #f2  ' abrimos archivo uno a uno                k = LOF(f2)                  ' nos informamos de su tamaño                ReDim b(0 To k - 1)          ' reservamos memoria                Get #f2, , b                 ' leemos origen                Put #f1, t, b                ' pegamos en destino                t = t + k                    ' actualizamos puntero de escritura            Close #f2                        ' cerramos archivo actual        Next        Erase b                              ' liberamos memoria        RefundirArchivo = Rutas(0)           ' si todo fue bien devolvemos la ruta del archivo resultante, si falló algo se devuelve una cadena vacía.    End Ifsale:    Close #f1, f2End Function   
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 --- Private Sub Form_Click()    Dim r() As String, res As String, k as integer       '  recopilación de las rutas...     ReDim r(0 To 9)    r(0) = "C:Mi archivo.jpg"    For k = 1 To 9        r(k) = "C:Mi archivo-00" & CStr(k) & ".jpg"    Next       res = RefundirArchivo(r)           '   llamada a la función       ' avisar del resultado     If res <> "" Then        MsgBox "Archivo refundido en el archivo: " & res    Else        MsgBox "Algo falló al refundir archivos..."    MsgBoxEnd Sub   
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.

Navegación

[0] Índice de Mensajes

Ir a la versión completa