Autor Beitrag
Biarchiv
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 688



BeitragVerfasst: So 21.07.02 11:36 
Hallo,

Habe den ProgrammCode von EDH2000. Mann kann mehrere Datein in eine Datei kopieren joinen und dann wieder splitten. Ich probierte es an mir selber also ParamStr(0) aus nur leider funktioniert der Code nur an anderen Dateien und nicht an der offenen EXE selbst. Was muß geändert werden?
ausblenden volle Höhe Quelltext
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;


Code-Tags hinzugefügt. Tino