Einzelnen Beitrag anzeigen

Benutzerbild von Uncle Cracker
Uncle Cracker

Registriert seit: 30. Mär 2003
Ort: Freital
694 Beiträge
 
#4

Re: Hilfe für einen Filesplitter

  Alt 10. Sep 2003, 13:36
Hier ist mal der kompletten Code zum Splitten/Zusammensetzten von Dateien mit FileStreams von http://home.pages.at/dbr-software/delphi.

Vielleicht hilft's:

Delphi-Quellcode:
// 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;
I wish it was legal to marry software because I'm madly in love with Delphi...
  Mit Zitat antworten Zitat