// Hiermit können Dateien gesplittet und zusammengesetzt werden.
// Beim Splitten gibt man die zu splittende Datei, den Zielordner für
// die Teildateien und deren gewünschte Anzahl an. Beim Zusammensetzen gibt
// man zuerst den Ordner an, in dem sich die Teildateien befinden, dann den
// Ursprungsnamen der Originaldatei und dann den Zielordner, in dem die Datei
// wieder zusammengesetzt werden soll, gefolgt von der Anzahl der Teildateien.

// Getestet mit D4 unter WinME

uses FileCtrl; 
 
procedure dateisplitten(dateiname, zielpfad: string; Teile: byte); 
var 
  ts, ats: TFilestream; 
  x: integer; 
  s, edg: string; 
begin 
  if teile > 1 then begin 
    edg := extractfileext(dateiname); 
    s := changefileext(extractfilename(dateiname), '') + '_'; 
    if zielpfad[length(zielpfad)] <> '\' then 
      zielpfad := zielpfad + '\'; 
    ForceDirectories(zielpfad); 
    if not DirectoryExists(zielpfad) then begin 
      showmessage('Ordnerfehler'); 
      exit; 
    end; 
    try 
      ts := TFilestream.create(dateiname, fmopenread); 
    except 
      showmessage('Datei konnte nicht geöffnet werden.'); 
      exit; 
    end; 
    if ts.size < teile then begin 
      showmessage('Anzahl der Teildateien ist zu groß.'); 
      ts.free; 
      exit; 
    end; 
    for x := 1 to teile do begin 
      try 
        ats := TFilestream.create(zielpfad + s + inttostr(x) + edg + 'T', 
          fmcreate); 
      except 
        showmessage('Teildatei konnte nicht erstellt werden.'); 
        ts.free; 
        exit; 
      end; 
      try 
        if x = teile then 
          ats.CopyFrom(ts, ts.size - ts.position) 
        else 
          ats.CopyFrom(ts, ts.size div teile); 
      except 
        showmessage('Fehler beim Kopieren der Daten.'); 
        ts.free; 
        ats.free; 
        exit; 
      end; 
      ats.free; 
    end; 
    ts.free; 
  end else 
    showmessage('Anzahl der Teildateien muss mindestens 2 sein.'); 
end; 
 
procedure dateizusammensetzen(quellpfad, stammname, zielpfad: string; Teile: 
  byte); 
var 
  ts, ats: TFilestream; 
  x: integer; 
  s, edg: string; 
begin 
  if teile > 1 then begin 
    edg := extractfileext(stammname); 
    s := changefileext(stammname, ''); 
    if quellpfad[length(quellpfad)] <> '\' then 
      quellpfad := quellpfad + '\'; 
    if zielpfad[length(zielpfad)] <> '\' then 
      zielpfad := zielpfad + '\'; 
    ForceDirectories(zielpfad); 
    if not DirectoryExists(zielpfad) 
      then begin 
      showmessage('Ordnerfehler'); 
      exit; 
    end; 
    try 
      ts := TFilestream.create(zielpfad + stammname, fmcreate); 
    except 
      showmessage('Datei konnte nicht erstellt werden.'); 
      exit; 
    end; 
    for x := 1 to teile do begin 
      try 
        ats := TFilestream.create(quellpfad + s + '_' + inttostr(x) + edg + 
          'T', fmopenread); 
      except 
        showmessage('Teildatei konnte nicht geöffnet werden.'); 
        ts.free; 
        exit; 
      end; 
      try 
        ts.CopyFrom(ats, ats.size) 
      except 
        showmessage('Fehler beim Kopieren der Daten.'); 
        ts.free; 
        ats.free; 
        exit; 
      end; 
      ats.free; 
    end; 
    ts.free; 
  end else 
    showmessage('Anzahl der Teildateien muss mindestens 2 sein.'); 
end; 
 
// Beispielaufruf zum Splitten 
procedure TForm1.Button3Click(Sender: TObject); 
begin 
  dateisplitten('d:\bilder\corel00.bmp', 'c:\Temp', 3); 
end; 
 
// Beispielaufruf zum Zusammensetzen 
procedure TForm1.Button4Click(Sender: TObject); 
begin 
  dateizusammensetzen('c:\Temp', 'corel00.bmp', 'c:\Pictures', 3); 
end; 



Zugriffe seit 6.9.2001 auf Delphi-Ecke