// 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;
|