Hallo, mit folgendem Code habe ich 1 (eine) Textdatei in eine EXE gepackt.
Delphi-Quellcode:
procedure Join(Main_FileName, Hidden_Filename : string);
var
MainFile : TFileStream;
HiddenFile : TFileStream;
SizeOfFile : Cardinal;
SearchWord : string[10];
begin
MainFile := TFileStream.Create(Main_FileName, fmOpenReadWrite or fmShareDenyWrite);
try
SizeOfFile := MainFile.Size;
HiddenFile := TFileStream.Create(Hidden_Filename, fmOpenRead or fmShareDenyNone);
try
MainFile.Seek(0, soFromEnd);
MainFile.CopyFrom(HiddenFile, 0);
MainFile.Seek(0, soFromEnd);
finally
HiddenFile.Free;
end;
SearchWord := IntToStr(SizeOfFile) + #0;
MainFile.Seek(0, soFromEnd);
MainFile.WriteBuffer(SearchWord, SizeOf(SearchWord));
finally
MainFile.Free;
end;
end;
// Aufruf
Join('C:\Datei.exe', 'C:\ReadMe.txt');
Delphi-Quellcode:
procedure Split(Main_FileName, NewFromMain_Filename : string);
var
MainFile : TFileStream;
SplitFile : TFileStream;
HelpStr : string[10];
GetSize : integer;
begin
MainFile := TFileStream.create(Main_FileName, fmOpenReadWrite or fmShareDenyWrite);
try
SplitFile := TFileStream.Create(NewFromMain_Filename, fmCreate or fmShareDenyNone);
try
MainFile.Position := MainFile.Size - 11;
MainFile.Read(HelpStr, 10);
GetSize := StrToInt(HelpStr);
MainFile.Position := GetSize;
SplitFile.CopyFrom(MainFile, MainFile.Size-GetSize);
SplitFile.Size := SplitFile.Size - 11;
MainFile.Size := GetSize;
finally
SplitFile.Free;
end;
finally
MainFile.Free;
end;
end;
// Aufruf
Split('C:\Datei.exe', 'C:\TheHidden.txt');
Das Problem ist, dass ich gerne 2 (zwei) Dateien in die Exe packen möchte, ich habe es so probiert:
Delphi-Quellcode:
procedure Join(Main_FileName,
Hidden_Filename, Hidden_Filename2 : string);
{Hidden_Filename2}
var
MainFile : TFileStream;
HiddenFile : TFileStream;
HiddenFile2 : TFileStream; {neu}
SizeOfFile : Cardinal;
SearchWord : string[10];
begin
MainFile :=
TFileStream.Create(Main_FileName,
fmOpenReadWrite or fmShareDenyWrite);
try
SizeOfFile := MainFile.Size;
HiddenFile := TFileStream.Create
(Hidden_Filename, fmOpenRead or fmShareDenyNone);
// neu
HiddenFile2 := TFileStream.Create
(Hidden_Filename2, fmOpenRead or fmShareDenyNone);
try
MainFile.Seek(0, soFromEnd);
MainFile.CopyFrom(HiddenFile, 0);
// neu
MainFile.CopyFrom(HiddenFile2, 0);
MainFile.Seek(0, soFromEnd);
finally
HiddenFile.Free;
HiddenFile2.Free; {neu}
end;
SearchWord := IntToStr(SizeOfFile) + #0;
MainFile.Seek(0, soFromEnd);
MainFile.WriteBuffer(SearchWord, SizeOf(SearchWord));
finally
MainFile.Free;
end;
end;
Das klappt glaube ich soweit.
Jetzt möchte ich es aber Splitten, das habe ich so versucht:
Delphi-Quellcode:
procedure Split(Main_FileName,
NewFromMain_Filename, NewFromMain_Filename2: string);
var
MainFile : TFileStream;
SplitFile : TFileStream;
SplitFile2 : TFileStream;
HelpStr : string[10];
GetSize : integer;
begin
MainFile := TFileStream.create
(Main_FileName, fmOpenReadWrite or fmShareDenyWrite);
try
SplitFile := TFileStream.Create
(NewFromMain_Filename, fmCreate or fmShareDenyNone);
SplitFile2 := TFileStream.Create
(NewFromMain_Filename2, fmCreate or fmShareDenyNone);
try
MainFile.Position := MainFile.Size - 11;
MainFile.Read(HelpStr, 10);
GetSize := StrToInt(HelpStr);
MainFile.Position := GetSize;
SplitFile.CopyFrom(MainFile, MainFile.Size-GetSize);
SplitFile.Size := SplitFile.Size - 11;
SplitFile2.CopyFrom(MainFile, MainFile.Size-GetSize);
SplitFile2.Size := SplitFile2.Size - 11;
MainFile.Size := GetSize;
finally
SplitFile.Free;
SplitFile2.Free;
end;
finally
MainFile.Free;
end;
end;
Das klappt leider nicht, denn die
DLL die ich "verpacke" hat am Ende 0 Byte und ist laut Windows "keine
DLL-Datei" mehr.
Was mache ich falsch?