| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 15:
 16:
 17:
 18:
 19:
 20:
 21:
 22:
 23:
 24:
 25:
 26:
 27:
 28:
 29:
 30:
 31:
 32:
 33:
 34:
 35:
 36:
 37:
 38:
 39:
 40:
 41:
 42:
 43:
 44:
 45:
 46:
 47:
 48:
 49:
 50:
 51:
 52:
 53:
 54:
 55:
 56:
 57:
 58:
 59:
 60:
 61:
 62:
 63:
 64:
 65:
 66:
 67:
 68:
 69:
 70:
 71:
 72:
 73:
 74:
 75:
 76:
 77:
 78:
 79:
 80:
 81:
 82:
 83:
 84:
 85:
 86:
 87:
 88:
 89:
 90:
 91:
 92:
 93:
 94:
 95:
 96:
 97:
 98:
 99:
 100:
 101:
 102:
 103:
 104:
 105:
 106:
 107:
 108:
 109:
 110:
 111:
 112:
 113:
 114:
 115:
 116:
 117:
 118:
 119:
 120:
 121:
 122:
 123:
 124:
 125:
 126:
 127:
 128:
 129:
 130:
 131:
 132:
 133:
 134:
 135:
 136:
 137:
 138:
 139:
 140:
 141:
 142:
 143:
 144:
 145:
 146:
 147:
 148:
 149:
 150:
 151:
 152:
 153:
 154:
 
 | 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;
 
 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;
 
 
 function AttachToFile(const AFileName: string; MemoryStream: TMemoryStream): Boolean;
 var
 aStream: TFileStream;
 iSize: Integer;
 wert : string;
 begin
 Result := False;
 if not FileExists(AFileName) then
 Exit;
 try
 aStream := TFileStream.Create(AFileName, fmOpenWrite or fmShareDenyWrite);
 //    Memo1.Lines.Add(#01#02#99);
 MemoryStream.Seek(0, soFromBeginning);
 // seek to end of File
 // ans Ende der Datei Seeken
 aStream.Seek(0, soFromEnd);
 // copy data from MemoryStream
 // Daten vom MemoryStream kopieren
 aStream.CopyFrom(MemoryStream, 0);
 // save Stream-Size
 // die Streamgröße speichern
 wert := '#01#02#99';
 iSize := MemoryStream.Size + SizeOf(Integer);
 aStream.Write(iSize, SizeOf(iSize));
 //    aStream.Write(iSize);
 finally
 aStream.Free;
 end;
 Result := True;
 end;
 
 function LoadFromFile(const AFileName: string; MemoryStream: TMemoryStream): Boolean;
 var
 aStream: TFileStream;
 iSize: Integer;
 begin
 Result := False;
 if not FileExists(AFileName) then
 Exit;
 try
 aStream := TFileStream.Create(AFileName, fmOpenRead or fmShareDenyWrite);
 // seek to position where Stream-Size is saved
 // zur Position seeken wo Streamgröße gespeichert
 aStream.Seek(5, soFromEnd);
 //    if (aStream = #99) then
 aStream.Seek(-SizeOf(Integer), soFromEnd);
 
 aStream.Read(iSize, SizeOf(iSize));
 if iSize > aStream.Size then
 begin
 aStream.Free;
 Exit;
 end;
 // seek to position where data is saved
 // zur Position seeken an der die Daten abgelegt sind
 aStream.Seek(-iSize, soFromEnd);
 MemoryStream.SetSize(iSize - SizeOf(Integer));
 MemoryStream.CopyFrom(aStream, iSize - SizeOf(iSize));
 MemoryStream.Seek(0, soFromBeginning);
 finally
 aStream.Free;
 end;
 Result := True;
 end;
 
 
 procedure TForm1.Button1Click(Sender: TObject);
 var
 aStream: TMemoryStream;
 begin
 aStream := TMemoryStream.Create;
 Memo1.Lines.Add(#01#02#99);
 Memo1.Lines.SaveToStream(aStream);
 AttachToFile('Test.exe', aStream);
 aStream.Free;
 end;
 
 procedure TForm1.Button2Click(Sender: TObject);
 var
 aStream: TMemoryStream;
 begin
 aStream := TMemoryStream.Create;
 LoadFromFile('Test.exe', aStream);
 //  SaveFromStream('Test1.exe', aStream);
 
 
 Memo1.Lines.LoadFromStream(aStream);
 aStream.Free;
 end;
 
 procedure TForm1.Button3Click(Sender: TObject);
 begin
 Join('EB.exe', 'first.txt');
 Join('EB.exe', 'sec.txt');
 end;
 
 procedure TForm1.Button4Click(Sender: TObject);
 begin
 Split(ParamStr(0), 'C:\sec.txt');
 Split(ParamStr(0), 'c:\first.txt');
 end;
 |