Thema: Delphi Problem mit TStream

Einzelnen Beitrag anzeigen

delpher

Registriert seit: 12. Mär 2004
30 Beiträge
 
#3

Re: Problem mit TStream

  Alt 31. Mär 2004, 21:38
Danke erstmal,


Klappt aber nicht habe ich schon probiert ich stelle mal meinen ganzen Code rein so der Server arbeitet ohne Probleme deswegen habe ich nur den Client Code rein gestellt!
Wenn ich den Code ausführe schreibt er die Datei auch auf platte er kann sie aber nicht in dem Image Feld zeigen er sagt immer Error Datei wird bereits von einem anderen Prozess benutzt! ICh verstehe das nicht allerdings Programmiere ich auch noch nicht solange und vielleicht ist es nur ein ganz einfacher Fehler währe echt froh wenn ich das hinkreigen könnte, und mir einer Helfen kann!
Eigentlich brauche ich nur unter dem Ereigniss OnCLientread eine Anweisung die mir sat wenn die Datei komplett übertragen ist denn die OnClientread Procedur wird ja solange ausgeführt bis die Datei komplett ist!
Aber das Problem ist wie kann ich abfangen wann die Datei komplett übertragen ist??? Dann könnte ich den Stream mit TStream.free frei machen!


Code:
procedure TForm1.Button8Click(Sender: TObject);
begin
  if Assigned(FStream) then
  begin
    FStream.Free;
    FStream := nil;
  end;
  if fileexists('c:\test.jpg') then begin
  ClientSocket1.Socket.SendText('hole_datei'); //Befehl für Server zum holen der Datei
  FStream := TFileStream.Create('c:\test.jpg', fmOpenWrite or fmShareDenyNone); //Datei erstellen
  end
  else exit;
end;

procedure TForm1.ClientSocket1Connect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  form1.Caption := 'CONNECTED';
end;

procedure TForm1.ClientSocket1Disconnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  Form1.Caption := 'NOT CONNECTED';
end;

procedure TForm1.ClientSocket1Connecting(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  Form1.Caption := 'CONNECTING';

end;

procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);

// In dieser Procedur muss es doch ne möglichkeit geben raus zu finden ob die Datei
// komplett ist oder nicht und wenn sie komplett ist mache folgendes mit der IF Anweisung oder
// so


var
 iLen: Integer;
  datei:file;
  Bfr: Pointer;
  MyString:string;


begin
   iLen := Socket.ReceiveLength;
  GetMem(Bfr, iLen);
  try
    Socket.ReceiveBuf(Bfr^, iLen);
    FStream.Write(Bfr^, iLen);
  finally
     FreeMem(Bfr);                        
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  FStream := nil;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
if Assigned(FStream) then
  begin
    FStream.Free;
    FStream := nil;
  end;

end;

Hoffe von euch kann mir jemand Helfen!
  Mit Zitat antworten Zitat