Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-07-2011
Tortuguica Tortuguica is offline
Miembro
 
Registrado: sep 2010
Ubicación: Elche, España
Posts: 46
Poder: 0
Tortuguica Va por buen camino
Creación de tipos de archivo

Hola a todos: En primer lugar, quiero pedir disculpas por si no estoy en el foro correcto. Y en segundo lugar, os explico cuál es mi problema: me gustaría compactar tres archivos (txt, rtf, ini) en un único archivo, con una extensión nueva, y, después, poder acceder a los archivos que contiene, claro. ¿Puede alguien darme una idea de por dónde empezar? He buscado en Google y no he encontrado nada. Gracias por adelantado.
Responder Con Cita
  #2  
Antiguo 16-07-2011
Tortuguica Tortuguica is offline
Miembro
 
Registrado: sep 2010
Ubicación: Elche, España
Posts: 46
Poder: 0
Tortuguica Va por buen camino
Aclaración

Bueno, antes he olvidado preguntar si es posible hacer eso. Gracias de nuevo.
Responder Con Cita
  #3  
Antiguo 16-07-2011
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.669
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Puedes comprimirlo en un zip y extraerlo cuando lo vayas a necesitar, supongo que será eso lo que quieres, ¿no?
Responder Con Cita
  #4  
Antiguo 16-07-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Tortuguica.

Si lo creo posible.

Es sencillo concatenar los tres archivos en un único archivo si se convierten todos a formato texto por ejemplo. Lo que se complica es la recuperación en el formato adecuado.
Los archivos .txt e .ini podrías leerlos y trabajar directamente de archivo a memoria, pero con el .rtf tendrías que guardarlo en un archivo temporal para luego cargarlo con un RichEdit por ejemplo.

Supongamos que el orden de agrupación es: .txt + .ini + .rtf
Conociéndo con antelación la longitud en bytes (caracteres) de cada uno sería cosa de leer los N caracteres del txt, los N del .ini y los restantes corresponderán al .rtf

Pero no sé si es eso lo que buscas hacer...

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 16-07-2011
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.210
Poder: 22
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Basta con escribir una cabecera delante de cada archivo. Luego se escriben todos uno detrás de otro precedidos de su cabecera.
Su cabecera puede ser una estructura que contenga el tamaño de la misma, nombre del archivo y su longitud.

Con esta estructura se pueden extraer los archivos uno detrás de otro sin importar el orden, tamaño, tipo ni número de los mismos.


Saludos.
Responder Con Cita
  #6  
Antiguo 16-07-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola escafandra.

Yo había pensado en eso, es más había probado este código y funciona bién:
Código Delphi [-]
function FileLength(const NomArch:String): DWord;
var
  Hndw: integer;
begin
  Hndw:= FileOpen(NomArch, 0);
  try
    Result:= (GetFileSize(Hndw, nil));
  finally
    FileClose(Hndw);
  end;
end;

procedure Concatenar(const FileNames: array of string);
var
  i: Integer;
  Ori, Des: TextFile;
  s: string;
  Len: DWord;
begin
  AssignFile(Des,'C:\TODOS.TXT');
  Rewrite(Des);
  for i:=  High(FileNames) downto Low(FileNames) do
  begin
    Len:= FileLength(FileNames[i]);
    AssignFile(Ori, FileNames[i]);
    Reset(Ori);
    Writeln(Des,FileNames[i]+':'+IntToStr(Len));
    while not eof(Ori) do
    begin
      ReadLn(Ori,s);
      Writeln(Des,s);
    end;
    Flush(Des);
    CloseFile(Ori);
  end;
  CloseFile(Des);
end;
Pero luego me puse a pensar, ¿ Como encuentro despues la cabecera si un archivo contiene el identificador que uso para distinguirla ?
Es decir como hacer para usar un identificador que sea diferente a cualquier combinación de caracteres posibles dentro de un archivo.
Por eso luego pensé en obtener previamente el tamaño en bytes.

¿ Se te ocurre algún modo ? Por que de esa forma es muchísimo más simple.

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 16-07-2011 a las 17:51:49.
Responder Con Cita
  #7  
Antiguo 16-07-2011
Tortuguica Tortuguica is offline
Miembro
 
Registrado: sep 2010
Ubicación: Elche, España
Posts: 46
Poder: 0
Tortuguica Va por buen camino
Gracias a todos

Pues muchas gracias a todos. ¡Qué máquinas sois! :-) Un saludo.
Responder Con Cita
  #8  
Antiguo 16-07-2011
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.210
Poder: 22
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Cita:
Empezado por ecfisa Ver Mensaje
Hola escafandra.
.....
¿ Se te ocurre algún modo ? Por que de esa forma es muchísimo más simple.
Si, La cabecera debe empezar con un WORD que contiene el tamaño de la misma. Inmediatamente un DWORD que contiene el tamaño del archivo y seguidamente un array de CHAR que contiene el nombre. Detras viene el archivo binario. Esto se repita por cada archivo.

Para recuperarlo leemos le primer WORD (2 Bytes) y tras elle leemos la cantidad de Bytes del resto de esa cabecera. El primer DWORD (4 Bytes) sabemos que es el tamaño del archivo, Sabemos la longitud del FileName restando el tamaño de la cabecera menos 6. Ya solo queda leer el archivo cuyo tamaño conocemos... Repetimos...

Si el tamaño de algún archivo es mayor de 4Gb podemos guardarlo en in int64 en vez de en un DWORD.
Podemos simplificarlo algo si reservamos un espacio fijo en la cabecera para el nombre de archivo, en ese caso sobra guardar el tamaño de la cabecera pues siempre será el mismo y conocido. Pero si queremos guardar el Path entero este ultimo sistema desaprovecha espacio.

No tengo un delphi a mano, no puedo realizar un ejemplo, pero deciros que algo similar ya implementé en C hace tiempo.

Saludos.


PD me voy de vacaciones y no podré seguir el hilo...

Última edición por escafandra fecha: 16-07-2011 a las 17:27:47.
Responder Con Cita
  #9  
Antiguo 16-07-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por escafandra Ver Mensaje
Si, La cabecera debe empezar con un WORD que contiene el tamaño de la misma. Inmediatamente un DWORD que contiene el tamaño del archivo y seguidamente un array de CHAR que contiene el nombre. Detras viene el archivo binario. Esto se repita por cada archivo.
Hola.

Buenisimo, no se me había ocurrido...

Gracias y que disfrutes el descanso.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #10  
Antiguo 16-07-2011
Tortuguica Tortuguica is offline
Miembro
 
Registrado: sep 2010
Ubicación: Elche, España
Posts: 46
Poder: 0
Tortuguica Va por buen camino
Gracias, escafandra y ecfisa. Perdón por mi escueto agradecimiento de antes, pero venía de la playa y estaba rendido :-/ Voy a ver cómo me sale la propuesta de escafandra. Un saludo a los dos.
Responder Con Cita
  #11  
Antiguo 16-07-2011
Tortuguica Tortuguica is offline
Miembro
 
Registrado: sep 2010
Ubicación: Elche, España
Posts: 46
Poder: 0
Tortuguica Va por buen camino
Ah, y gracias también a ti, Casimiro Notevi, claro (la playa me ha matao la buena educación). Pero lo que estaba buscando es lo que han sugerido escafandra y ecfisa. Más saludos para todos.
Responder Con Cita
  #12  
Antiguo 16-07-2011
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.669
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Ya nos contarás
Responder Con Cita
  #13  
Antiguo 17-07-2011
Tortuguica Tortuguica is offline
Miembro
 
Registrado: sep 2010
Ubicación: Elche, España
Posts: 46
Poder: 0
Tortuguica Va por buen camino
Ya os puedo contar: al final, no lo he hecho como decíais... porque no tengo muy claro lo de la escritura y lectura de archivos binarios :-( Pero, y esta es la parte positiva, me habéis dado una idea. Ahora lo guardo todo en un archivo con la longitud de cada parte (rtf, txt, ini) al principio de cada una de ellas. Después recupero cada parte, la transformo en un archivo temporal conveniente, lo utilizo y me lo cargo. Es un poco primario, pero eficiente. Prometo estudiar un poco más de Delphi para no tener que volver a recurrir a cutreríos como el que he hecho. Gracias de nuevo a todos por vuestro interés. Un saludo.
Responder Con Cita
  #14  
Antiguo 17-07-2011
Avatar de fide_uci
fide_uci fide_uci is offline
Miembro
 
Registrado: ene 2009
Ubicación: Cuba - La Habana
Posts: 226
Poder: 18
fide_uci Va por buen camino
Yo mejor utilizaria por ejemplo algo como ZipForge. Usando este componente creo un Zip, meto cada uno de los archivos en un Zip y ya esta. Incluso le puedo poner hasta contraseña al Zip para que nadie los pueda extraer. Luego a la hora de revertir el proceso leo el Zip, extraigo los archivo y los utilizo. No seria mala idea verdad?
Responder Con Cita
  #15  
Antiguo 17-07-2011
Tortuguica Tortuguica is offline
Miembro
 
Registrado: sep 2010
Ubicación: Elche, España
Posts: 46
Poder: 0
Tortuguica Va por buen camino
Pues no parece mala, no, fide_uci. Lo que pasa es que, en principio, no quiero recurrir a otras aplicaciones... Pero lo estudiaré, desde luego. Gracias por la idea. Un saludo.
Responder Con Cita
  #16  
Antiguo 17-07-2011
Tortuguica Tortuguica is offline
Miembro
 
Registrado: sep 2010
Ubicación: Elche, España
Posts: 46
Poder: 0
Tortuguica Va por buen camino
Uy, fide_uci, me parece que acabo de meter la pata :-O Me he dado cuenta que dices que ZipForge es un componente. Se me ha ido el santo al cielo y he relacionado ZipForge con una aplicación tipo WinZip. Es que sigo estando un poco verde de más, lo siento :-( Bueno, y este componente, ¿de dónde lo saco?
Responder Con Cita
  #17  
Antiguo 17-07-2011
Avatar de fide_uci
fide_uci fide_uci is offline
Miembro
 
Registrado: ene 2009
Ubicación: Cuba - La Habana
Posts: 226
Poder: 18
fide_uci Va por buen camino
Bueno, hasta donde se en internet hay una version gratis, que lo unico que hace es ponterte un molesto cartelito cuando esta iniciando Delphi pero bueno no te afecta en nada a tu aplicacion. Puedes hacer una busqueda en google "ZipForge + Delphi" o algo parecido y bajarte el componente. Saludos.
Responder Con Cita
  #18  
Antiguo 17-07-2011
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.669
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Cita:
Empezado por Tortuguica Ver Mensaje
Uy, fide_uci, me parece que acabo de meter la pata :-O Me he dado cuenta que dices que ZipForge es un componente. Se me ha ido el santo al cielo y he relacionado ZipForge con una aplicación tipo WinZip. Es que sigo estando un poco verde de más, lo siento :-( Bueno, y este componente, ¿de dónde lo saco?
Hay algunos componentes de compresión que son libres y puedes usarlos, por ejemplo zipmaster.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Hora de creación de archivo Belaix Varios 2 15-11-2008 21:13:53
Cambiando la fecha de creacion de un archivo cascarrabias Varios 2 10-03-2008 18:24:48
Asociar Aplicación y Tipos de Archivo gaps2k Varios 1 10-04-2007 19:15:51
Cómo filtrar por tipos de archivo en un componente ShellTreeView MaMu API de Windows 3 14-08-2006 06:19:19
Creacion de un archivo HTML... JorgeBec Varios 2 30-07-2004 13:15:51


La franja horaria es GMT +2. Ahora son las 21:07:03.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi