Ver Mensaje Individual
  #6  
Antiguo 20-09-2016
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Reputación: 25
Delphius Va camino a la fama
Cita:
Empezado por ecfisa Ver Mensaje
Hola

El tamaño es el que tiene cada archivo previo a la concatenación.

Deberías obtener y guardar esos valores de tamaño en algún sitio, por que desde el archivo compuesto, es imposible obtener los tamaños de los diferentes archivos agregados.

De otro modo, habría que poner marcas para poder identificar la finalización de cada archivo.

Saludos
O bien armar una especie de Header a modo tabla que contenga la cantidad de items/archivos y sus respectivos tamaños. Luego es cosa de posicionarse en el lugar correcto y leer buffers de sus respectivos tamaños. Naturalmente este Header debe ser lo primero del archivo del archivo.

El header debe contener en este orden:
0.Cantidad de archivos
1. Tamaño del archivo #1
2. Tamaño del archivo #2
...
N. Tamaño del archivo #N

Luego viene la data del primer archivo, etc.

Lo que debe de cuidarse es de leer la cantidad justa de bytes. Por eso debe definirse adecuadamente que tipo de dato se va a usar para almacenar esta información... ¿Cuántos archivos se tiene pensado poder concatenar? Para 255 solo es suficiente con leer un byte... pero si se necesita de más se debe usar un SmallInt por lo menos.
Luego debe cuidarse también el tamaño de los archivos... Al menos las funciones que tiene Delphi y que actúan de indirección hacia la API de Windows, devuelven un Int64... ahí ya tienes unos cuantos bytes más por leer

Asi que de pronto, mínimo necesitas:
1. Leer el primer byte para saber la cantidad de archivos // si vas a permitir más de 255 necesitas 2 o más bytes... tu pones el límite!
2. Leer los siguientes 8 bytes para saber el tamaño del archivo
3. Ir a la posición correspondiente y leer el buffer de ese mismo tamaño
4. Repetir 2-4 según cantidad de archivos

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita