Einzelnen Beitrag anzeigen

Holger

Registriert seit: 4. Aug 2003
Ort: Meerbusch
8 Beiträge
 
Delphi 7 Enterprise
 
#1

TCP Datei/Senden GetNamePath

  Alt 24. Sep 2003, 17:14
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
  Mit Zitat antworten Zitat