Autor Beitrag
Niels_
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 117



BeitragVerfasst: Fr 21.10.05 21:46 
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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Fr 21.10.05 22:05 
Hallo!

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

Cu,
Udontknow
Niels_ Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 117



BeitragVerfasst: Sa 22.10.05 20:17 
hmm - habe das versucht, aber irgendwie kriege ich immer fehler..
hier mein "Prog":

(der sender)
ausblenden 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)
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: 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?

_________________
Na denn, dann. Bis dann, denn.
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Sa 22.10.05 20:26 
Hallo,

wenn ich das richtig sehe gibst Du in Deinem zweiten Code den Stream zu früh frei,
ausblenden Delphi-Quelltext
1:
2:
3:
      FStream.Free; // Stream freigeben  <------------
    end;  
   Loadstrfromstream(Fstream,s); // <------------

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
Niels_ Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 117



BeitragVerfasst: 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... ;)