Einzelnen Beitrag anzeigen

Tommy1988
(Gast)

n/a Beiträge
 
#1

Joinen und Splitten von Dateien

  Alt 27. Jul 2007, 15:02
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?
  Mit Zitat antworten Zitat