Zitat von
robinWie:
ich habe im Internet was gefunden umd mit den TSocket Komponenten Dateien zu schicken.
Und offensichtlich falsch abgeschrieben
Zitat von
robinWie:
Hier der Code beim Empfangen:
Delphi-Quellcode:
FST := TFileStream.Create(TMP, fmCreate or fmShareDenyWrite);
...
finally
FST := nil;
FST.Free;
end;
Das Problem liegt in deinem finally, tausche mal die beiden Zeilen oder lass FST := nil gleich weg. FST ist vom Typ TFileStream, hat also als Typ eine Klasse. Bei Objekten (Instanzen von Klassen) wird implizit mit Zeigern gearbeitet. Ohne dass Du etwas dafür/dagegen tun kannst wird in der Variablen FST also nur die Adresse des Objekts, dass Du mit FST := TFileStream.Create(..) erzeugst gespeichert.
Im finally-Block lässt Du FST dann erstmal auf die Adresse nil zeigen (wo bekanntlich nichts steht). Dein eigentliches Objekt (dass Du mit einer Sperre
fmCreate or fmShareDenyWrite angelegt hast) befindet sich noch im Speicher. Mit dem FST.Free gibst Du ein Objekt an der Adresse nil frei, Free macht genau dann nichts (weil man eben nichts nicht freigeben kann).
Wichtig ist hier wirklich zu verstehen, dass FST nur der (implizite) Zeiger auf ein Objekt ist. Weißt Du FST einen anderen Wert zu, so änderst Du nur die Adresse auf die die Variable zeigt, nicht das Objekt hinter eben dieser Adresse.
Gruß Der Unwissende