Hi OrallY!
Da ich auch schon an dieser Sache versucht hab und gescheitert bin, bin ich dir erstmal dankbar für den Tip. Also, ich hab den Code noch etwas ergänzt, weil ich festgestellt hab, dass der Stream bei mir ca. 1,6 GB groß war, obwohl ich eine 2KB-Datei genommen hab. Das gab Probleme bei speichern, weil ich nicht mehr soviel Platz auf der Festplatte hatte (sonst hätte ich den Fehler vielleicht garnicht gefunden). Ich hab einfach mal die Größe der Datei vorweggeschickt; ich hab WriteLn bzw ReadLn benutzt, weil manchmal WriteInteger und ReadInteger Fehler macht, wenn die folgenden Daten auch als Integer ausgewertet werden könnten.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
fs: TFileStream;
begin
if not OpenDialog1.Execute then exit;
with IdTCPClient1 do
begin
fs := TFileStream.Create(OpenDialog1.FileName, fmOpenRead or fmShareDenyWrite);
Connect;
try
WriteLn(IntToStr(fs.Size));
WriteStream(fs);
finally
Disconnect;
fs.Free;
end;
end;
end;
procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
var
fs: TFileStream;
size: Longint;
begin
if not SaveDialog1.Execute then exit;
fs := TFileStream.Create(SaveDialog1.Filename, fmCreate or fmShareExclusive);
with AThread.Connection do
try
size := StrToInt(ReadLn);
ReadStream(fs, size);
finally
Disconnect;
fs.Free;
end;
end;
Ach, und vergess nicht SendBufferSize(in Byte) des TCPClients auf eine Größe zu setzen, die mindestens so groß ist, wie die Datei, die du versenden möchtest.