Home » Tipps & Tricks » Dateien/Verzeichnisse » Dateioperationen » Dateien verschmelzen

Dateien verschmelzen

Möchten Sie mehrere Dateien zu einer Datei verschmelzen, hilft Ihnen die untenstehende Routine weiter.
Folgende Routine erwartet zwei Parameter: Eine Liste mit Dateinamen, aus denen später die Zieldatei gebildet wird und den Dateinamen der Zieldatei. Die Dateien aus der Dateiliste müssen sich nicht im gleichen Verzeichnis befinden.

procedure ReUniteFile(const Files: TStrings; const FileName: string);
var
  f1, f2: TFileStream;
  i: integer;
begin
f1 := TFileStream.Create(Filename, fmCreate or fmShareDenyWrite);
  try
  for i:=0 to Files.Count-1 do
    begin
      f2 := TFileStream.Create(Files[i], fmOpenRead or fmShareDenyNone);
      try
        f1.CopyFrom(f2, 0);
      finally
        f2.Free;
      end;
    end;
  finally
    f1.Free;
  end;
end;

Die Procedure überprüft nicht, ob es Sinn macht die angegebenen Dateien zu verschmelzen. Es lassen sich beliebige Dateien kombinieren, die später aber nicht unbedingt wieder getrennt werden können, da die Dateigröße eines jeden Segments unbekannt ist.

Die Dateien werden in der Reihenfolge verschmolzen, wie sie in der Liste stehen. Bitte beachten Sie, dass TFileStream, den die Routine intern verwendet, mit großen Dateien über 2 GB Probleme bekommt.
Die Routine kann so aufgerufen werden:

procedure TForm1.Button1Click(Sender: TObject);
var
  sl: TStringlist;
begin
  sl := TStringlist.Create;
  try
    sl.Add('c:\Bild.bmp.001');
    sl.Add('c:\Bild.bmp.002');
    ReUniteFile(sl, 'c:\NeuesBild.bmp');
  finally
    sl.Free;
  end;
end;