Yo te he propuesto esta variante de código con la seguridad de que se trata de ficheros pequeños que construyen uno mayor, y por esta razón no controlo el tamaño del fichero origen.
Para garantizar que funcione bien con cualquier tamaño de fichero es necesario lerr por bloques el origen hasta agotarlo, para evitar un desbordamiento de la memoria con un tamaño de buffer excesivo. Observa el siguiente ejemplo y comprobarás que funciona bien bajo cualquier situación (Ojo que windows no acepta ficheros mayores de 2 GB). Lógicamente deberás probar y adaptar a tus necesidades ya que está escrito 'al vuelo' y he podido cometer algún error.
Código:
public function union(FDestino as String, relpath as string, bloques as Long) as boolean
Dim Buffer As String
Dim MaxLen As Long
Dim Resto As Long
Dim ptr As Long
Dim i as Long
Dim hdo as integer
Dim hdd as Integer
On Local Error Resume Next
'Asumimos un bloque máximo de lectura de 1 MB
MaxLen = 1024^2
'Apertura del archivo Destino
hdd = Freefile()
Close #hdd : Open FDestino For Binary As #2
'Bucle de tratamiento de las diferentes particiones
'con las que se construye el fichero completo.
for i = 1 to bloques
'Abrimos el fichero origen 'I'
hdo = Freefile() : Close #hdo
Open RelPath & cstr(i) & "." & cstr(i) For Binary As #hdo
'Iniciamos el puntero de lectura
ptr = 0
Do
If (LOF(hdo)-ptr) <= Len(MaxLen) then
'Asignamos un buffer stream de la longitud pendiente de copia
Buffer = string(LOF(1)-ptr, 32)
Get #hdo, ptr+1, Buffer
Put #hdd, , Buffer
Close #hdo
Exit Do
Else
'Lectura y proceso de un Bloque MaxLen
Buffer = string(MaxLen, 32)
Get #hdo, ptr+1, Buffer
Put #hdd, , Buffer
ptr=ptr+MaxLen
End If
Loop
Next i
'Cerramos fichero destino
Close #2
'Controlamos si se han producido errores
'durante el proceso de reconstrucción.
union = iff(Err<>0, false, true)
end function