Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Varios archivos en uno (https://www.clubdelphi.com/foros/showthread.php?t=51892)

elcolo83 03-01-2008 11:38:38

Varios archivos en uno
 
Bueno, mi duda es como puedo hacer para meter varios archivos en uno solo... estoy haciendo una aplicacion en delphi 2007 que usa plugins con archivos ".bpl" y mi idea es juntar a ese archivo ".bpl" con un archivo de configuracion ".ini" y luego encriptarlo en lo posible sin usar un xor sino a travez a de algun otro...
Alguien conoce alguna manera de poder hacerlo?

Neftali [Germán.Estévez] 03-01-2008 14:13:14

Cita:

Empezado por elcolo83 (Mensaje 255690)
...y mi idea es juntar a ese archivo ".bpl" con un archivo de configuracion ".ini" y luego encriptarlo en lo posible sin usar un xor sino a travez a de algun otro...

Puedes juntar los archivos y encriptarlos, pero luego ¿de qué te servirán?

A la hora de ejecutar tu aplicación, esos dos archivos (BPL/INI) deben estar separados desencriptados si no no podrás acceder a ellos.
Si los encriptas por separado entonces talvez sí. Utiliza algun compresor/encriptador de ejecutables para la BPL y algun algoritmo de encriptación para el INI que luego desde tu aplicación o desde la BPL puedes desncriptar.

De todas formas no acabo de enterder a donde queres ir a parar.

elcolo83 03-01-2008 14:25:52

Si tenes razon, me olvide de aclarar algo... El hecho de que esten encriptados es por seguridad y que esten juntos es para faciliotar la intalacion del plugin... el programa importa al plugin en una carpeta X pero antes de esto verifica los datos del archivo ".ini" (previamente extraido en la carpeta temp) el ID del equipo y algunas cositas mas (el usuario me entrega su id a la hora de la intalacion para yo luego darle la licencia y el id de usuario, una pequeña tecnica anti crack).... en fin, comprueba el id del equipo y el usuario y luego si todo esto esta bien extraer los archivos en la carpeta de plugins

elcolo83 03-01-2008 14:36:32

Bueno.... aca esta la primera parde del problema resuelto...
es un form con 3 botones, un listbox y un opendialog respectivamente renombrados tengo esto:

Código Delphi [-]

unit ConcatArch;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm3 = class(TForm)
    BAgregar: TButton;
    BExtraer: TButton;
    Lista: TListBox;
    OpenD: TOpenDialog;
    Contenido: TButton;
    procedure BAgregarClick(Sender: TObject);
    procedure BExtraerClick(Sender: TObject);
    procedure ContenidoClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;


var
  Form3: TForm3;

implementation
Uses FConcatArch;
{$R *.dfm}


procedure TForm3.BAgregarClick(Sender: TObject);
var i: integer;
var
Stream: TFileStream;
begin
if OpenD.Execute then
  begin
    Stream:= TfileStream.Create('d:\prueba.concat',fmShareExclusive or fmCreate);
    try
      for I := 0 to OpenD.Files.Count - 1 do
        Agregar(OpenD.Files[i], Stream);
    finally
      Stream.Free;
    end;
  end;
end;

procedure TForm3.BExtraerClick(Sender: TObject);
var Stream: TFileStream;
begin
if Lista.ItemIndex>=0 then
begin
  Stream:= TfileStream.Create('d:\prueba.concat',fmOpenRead or fmShareDenyWrite);
  try
    Extraer('d:\Temp',Stream, Lista.Items[Lista.ItemIndex]);
  finally
    Stream.Free;
  end;
end;
end;

procedure TForm3.ContenidoClick(Sender: TObject);
var Stream: TFileStream;
    L: TStrings;
begin
Stream:= TfileStream.Create('d:\prueba.concat',fmOpenRead or fmShareDenyWrite);
  try
    L:= TStrings.Create;
    VerContenido(Stream, L);
    Lista.Items:= L;
    L.Free;
  finally
    Stream.Free;
  end;
end;

end.


Luego en una unidad que llame FConcatArch tengo estas funciones:

Código Delphi [-]
unit FConcatArch;

interface
Uses SysUtils, Classes;

  type TCabecera = packed record
    Nombre: String[255];
    Longitud: int64;
    end;


procedure Agregar(Archivo: string; Stream: TStream);
procedure Extraer(Ruta: string; Stream: TStream; NombreArch: String);
procedure VerContenido(Stream: TStream; var Lista: TStrings);


implementation


procedure Agregar(Archivo: string; Stream: TStream);
var
  Cabecera: TCabecera;
  FileStream: TFileStream;
begin
  Stream.Seek(0,soFromEnd);
  FileStream:= TFileStream.Create(Archivo,fmOpenRead or fmShareDenyWrite);
  try
    FillChar(Cabecera,Sizeof(Cabecera),0);
    Cabecera.Nombre:= ExtractFileName(Archivo);
    Cabecera.Longitud:= FileStream.Size;
    Stream.Write(Cabecera,Sizeof(Cabecera));
    Stream.CopyFrom(FileStream,0);
  finally
    FileStream.Free;
  end;
end;



procedure Extraer(Ruta: string; Stream: TStream; NombreArch: String);
var
  Cabecera: TCabecera;
  FileStream: TFileStream;
begin
  if Copy(Ruta,Length(Ruta),1) <> '\' then
    Ruta:= Ruta + '\';
  Stream.Seek(0,soFromBeginning);
  while Stream.Position < Stream.Size do
    begin
      Stream.Read(Cabecera,Sizeof(Cabecera));
      if Cabecera.Nombre=NombreArch then
        begin
          with TFileStream.Create(Ruta + Cabecera.Nombre,fmCreate or fmShareExclusive) do
            try
              CopyFrom(Stream,Cabecera.Longitud);
            finally
              Free;
            end;
          Break;
        end
      else Stream.Position:= Stream.Position+Cabecera.Longitud;
    end;
end;


procedure VerContenido(Stream: TStream; var Lista: TStrings);
var
  Cabecera: TCabecera;
  FileStream: TFileStream;
  L: TStringList;
  i: integer;
begin
  L:= TStringList.Create;
  Stream.Seek(0,soFromBeginning);
  L.Clear;
  while Stream.Position < Stream.Size do
    begin
      Stream.Read(Cabecera,Sizeof(Cabecera));
      Stream.Position:= Stream.Position+ Cabecera.Longitud;
      L.Add(Cabecera.Nombre);
    end;
  Lista:= L;
end;


end.


las funciones agregar y extraer las saque de este hilo http://www.clubdelphi.com/foros/arch...hp/t-2832.html
y modifique ligeramente la funcion extraer

Con esto ya tengo los archivos metidos en uno solo ahora me queda lo de la encriptacion...

seoane 03-01-2008 14:45:59

Para cifrar permiteme recomendarte esto:

http://delphi.jmrds.com/?q=node/31

Por cierto, el código para concatenar se me hacia conocido y no sabia porque :p , me estoy heciendo viejo :(

elcolo83 03-01-2008 15:02:17

Muy bien.... muchas gracias por tu aporte, ayer habia estado buscando algun cosigo con el cifrado de AES pero no lo encontraba para delphi, aparecian algunos para C pero tenia que transquibir algunos archivos de C a Delphi para poder usar ese codigo y era un poco mas extenso que este que me pasaste... Ahora le voy a agregar una funcion a este programita test para ver como anda, Gracias!!!


La franja horaria es GMT +2. Ahora son las 03:53:44.

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