Hallo zusammen,
Ich arbeite gerade daran Dateien über Lan und Internet zu verschicken
dazu habe ich mir folgenden Code gezogen!
Client
Delphi-Quellcode:
procedure TFtClient.BtSendenClick(Sender: TObject);
var fs: TFileStream;
begin
if not OpenDialog1.Execute then exit; //erstmal besorgt man sich den Pfad der Datei, z.B. mit dem Standard Dialog TOpenDialog
with TCPClient do
begin
fs := TFileStream.Create(OpenDialog1.FileName, fmOpenRead or fmShareDenyWrite); //Datei in FileStream einlesen
Connect; //und Verbindung herstellen
try
OpenWriteBuffer; //stellt sicher, dass alle Daten versendet werden
try
WriteStream(fs, true, true, 0); {das 2. true ist wichtig!, da es bewirkt, dass die Größe des Streams mittels WriteInteger zuerst verschickt wird}
CloseWriteBuffer;
except
CancelWriteBuffer;
raise;
end;
finally
Disconnect;
fs.Free;
end;
end;
end;
Server
Delphi-Quellcode:
procedure TFTServer.TCPServerExecute(AThread: TIdPeerThread);
var
fs: TFileStream;
SizeOfIncomingStream: integer;
begin
if not SaveDialog1.Execute then exit;
fs := TFileStream.Create(SaveDialog1.Filename, fmCreate or fmShareExclusive);
with AThread.Connection do
try
SizeOfIncomingStream := ReadInteger; //Größe des Streams empfangen
ReadStream(fs, SizeOfIncomingStream); //und übergeben
finally
Disconnect;
fs.Free;
end;
end;
Das funktioneirt auch soweit recht gut so lange ich nicht zu große Dateien verschicke!
Ansonten passiert in dem Programm einfach mal gar nichts oder es friert ein!
Nun meine 2 Fragen.
1. Wie kann ich dem Server den Dateinamen übermitteln so das diesem im SaveDialog die Datei direkt mit richtiger Dateiendung angezeigt wird ? Geht das mit GetNamePath? Wenn ja wie muss ich das einbinden!
2. Ich würde gerne eine Art Statusanzeige haben. Habe es bereits mit der Prgressbar und den OnBegin und Onwork Ereignissen probiert. Ich erhalte zwar über
Progressbar1.Max := AworkCountMax;
die Dateigröße aber das Problem besteht darin das das OnWork Ereignis
Progressbar1.Position := AworkCount;
gar nicht ausgelöst wird!
Wie kann ich das beheben ?
Schon mal danke im voraus bis denn
Holger