Ver Mensaje Individual
  #11  
Antiguo 22-09-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 36
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 Ramsay
Cita:
Empezado por Ramsay Ver Mensaje
Hola ecfisa gracias por la ayuda , tu codigo funciona perfecto para cuando junto un ejecutable con otro archivo y luego los desuno , se descomprime bien pero cuando ejecuto el ejecutable desunido se muestra :
Cita:
Windows no puede encontrar el archivo "la ruta..." , Asegurese que el nombre este escrito correctamente e intetelo de nuevo
o
Cita:
La version de este archivo no es compatible con la version de windows que esta ejecutando ... (y despues habla de 32 o 64 bits)
Eh comprobado los size de los archivos y estan perfectos , ¿ conoces alguna solucion para corregir este problema ?
Acabo de hacer la prueba (bajo Windows 32 bits) uniendo y extrayendo un archivo ejecutable con uno de texto sin ningún problema usando este código:
Código Delphi [-]
procedure ConcatFiles(const SourceNames: array of string; const TargetName: string);
var
  Source, Target: TFileStream;
  i : Integer;
begin
  if Length(SourceNames) < 1 then
    raise Exception.Create('Se requieren dos archivos al menos');
  Target := TFileStream.Create(TargetName, fmCreate);
  try
    for i := Low(SourceNames) to High(SourceNames) do
    begin
      Source := TFileStream.Create(SourceNames[i], fmOpenRead);
      try
        Target.CopyFrom(Source, Source.Size);
      finally
        Source.Free;
      end;
    end;
  finally
    target.Free;
  end;
end;

procedure ExtractFiles(const SourceName: string; const TargetNames: array of string;
  const SizeTargets: array of Integer);
var
  Source, Target: TStream;
  Buffer: array of Byte;
  i : Integer;
begin
  Source := TFileStream.Create(SourceName, fmOpenRead);
  try
    for i := Low(TargetNames) to High(TargetNames) do
    begin
      Target := TFileStream.Create(TargetNames[i], fmCreate);
      try
        SetLength(Buffer, SizeTargets[i]);
        Source.ReadBuffer(Pointer(Buffer)^, Length(Buffer));
        Target.WriteBuffer(Buffer[0], Length(Buffer));
        Form1.Memo1.Lines.Add(PChar(Buffer));
      finally
        Target.Free;
      end;
    end;
  finally
    Source.Free;
  end;
end;
El ejecutable funciona sin problema luego de ser extraido y el archivo de texto mantiene su contenido original.

En cuanto a los errores que comentas, el primero da toda la impresión que está provocado por un error al escribir alguna ruta o nombre de archivo.

Si bien el segundo mensaje advierte sobre alguna incompatibilidad de S.O., es muy probable que se produzca por enviar a la rutina de extracción un tamaño de archivo erróneo.

Saludos
__________________
Daniel Didriksen

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