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



BeitragVerfasst: So 11.08.02 10:19 
Hallo,
Habe folgenden Code von EDH2000. Wie kann ich den die procedure jetzt umschreiben das der Namen der gejointen file automatisch mitgespeichert wird und nicht angegeben werden muß.
Split('C:\Datei.exe'); // Er muß jetzt die Datei automatisch mit richtigen namen rausschreiben.

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:
Dateien miteinander verschmelzen

Wer einen Installer unter Delphi schreiben möchte, wird vielleicht eine Methode vermissen, mit denen man Files verschmelzen und wieder trennen kann. Dies kann man mit beiden Prozeduren erreichen.
Join dient zum verschmelzen der beiden Dateien und Split trennt beide wieder.
Nach dem verschmelzen ist die Hauptfile immer noch voll ausführbar (wenn sie keinen CRC Check oder so was besitzt) und die 2. Datei in der Hauptdatei drin.
Beim Aufruf von Split wird die 2. Datei aus der 1. angelegt und die 1. Datei verkürzt.


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;


Das Verschmelzen der Dateien erfolgt so:

  Join('C:\Datei.exe', 'C:\ReadMe.txt');

Und das Trennen mit folgendem Aufruf(wenn Datei.exe die zusammengeschmolzene Datei ist):

  Split('C:\Datei.exe', 'C:\TheHidden.txt');


Zuletzt bearbeitet von Biarchiv am So 11.08.02 12:01, insgesamt 1-mal bearbeitet