Entwickler-Ecke

Internet / Netzwerk - Streams und strings vereinen?


Niels_ - Fr 21.10.05 21:46
Titel: Streams und strings vereinen?
Hallo, habe folgendes: habe eine Datei in einen TfileStream geladen, nun möchte ich noch einen string (den Dateinamen+länge des Namens - länge ist nicht das problem^^) am Anfang hinzufügen. Also simpel gesagt:


Delphi-Quelltext
1:
2:
st:=Tfilestream.create('c:\test.dat',fmOpenRead);
st:='TEST.dat(8)'+st;  //Das geht halt nicht ;)


möchte das dann über das Netzwerk laufen lassen. Habe keine passenden tutorials o.ä. gefunden, wäre also über jede Hilfe dankbar.


Udontknow - Fr 21.10.05 22:05

Hallo!

Kurz und knapp, Suchwort : Suche in: Delphi-Forum LOADSTRFROMSTREAM / Suche in: Delphi-Forum SAVESTRTOSTREAM.

Cu,
Udontknow


Niels_ - Sa 22.10.05 20:17

hmm - habe das versucht, aber irgendwie kriege ich immer fehler..
hier mein "Prog":

(der sender)

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
var
  FStream: TFileStream;
begin
  FStream := TFileStream.Create('C:\test.abc', fmOpenRead);
  try
    SaveStrToStream(Fstream,'test.abc');
    AThread.Connection.OpenWriteBuffer;
    AThread.Connection.WriteStream(FStream);
    AThread.Connection.CloseWriteBuffer;
  finally
    AThread.Connection.Disconnect;
    FStream.Free;
  end;
end;


(der empfang)

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure TForm1.Button2Click(Sender: TObject);
var
  FStream: TFileStream; s:string;
begin
  FStream := TFileStream.Create('C:\temp.abc', fmCreate);
  with Form1 do begin
    IdTCPClient1.Connect; // Verbindung aufbauen
    try
      IdTCPClient1.ReadStream(FStream, -1, True); // Stream empfangen
      FStream.Seek(0, soFromBeginning);
    finally
      IdTCPClient1.Disconnect; // Verbindung schließen
      FStream.Free; // Stream freigeben
    end;
   Loadstrfromstream(Fstream,s);
   showmessage(s);
  end;


kurze erklärung:
wie man sehen kann, möchte ich gerne im stream angeben, wie die datei heißt, diese dann übers netzwerk verschicken und dort dann erst mal temporär abspeichern um dann richtig umzubenennen und dann unter dem richtigen Namen abspeichern.


alzaimar - Sa 22.10.05 20:24

Du öffnest einen String zum Lesen (fmOpenRead) und schreibst dann DA etwas rein, wenn Du ihn mit fmOpenReadWrite geöffnet hättest, würdest Du den String in die Datei schreiben.

Was kann denn AThread.Connection noch ausser WriteStream, etwa auch WriteString?


Lannes - Sa 22.10.05 20:26

Hallo,

wenn ich das richtig sehe gibst Du in Deinem zweiten Code den Stream zu früh frei,

Delphi-Quelltext
1:
2:
3:
      FStream.Free; // Stream freigeben  <------------
    end;  
   Loadstrfromstream(Fstream,s); // <------------


Niels_ - Sa 22.10.05 22:17

Danke erstmal, hat soweit alles gepasst

oh man - ich muss gestehen, dass ich mit streams so meine probleme hab.
Wie kann ich denn jetzt vom letzten Stream (nachdem ich die stringvariable gelesen hab) diese nicht nur auslesen, sondern auch vom stream wieder löschen? muss ich dafür einen 2. anlegen und alles hinter dem string herauskopieren? bitte mit source... ;)