Indy FTP bzw. MemoryStream fehler
spacer
Autor Nachricht
>M@steR<
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 255
Erhaltene Danke: 2

Win7
Delphi 2005 PE (D7 Pro)
BeitragVerfasst: Fr 03.09.10 15:25 
Hi Leute,

kann mir wer verraten was ich hier falsch mache?

ausblenden volle Höhe Delphi-Quelltext markieren
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
procedure TForm1.Button1Click(Sender: TObject);
var st: TMemoryStream;
s: string;
begin
s := Memo2.Text;
st := TMemoryStream.Create;
try
st.WriteBuffer(s,length(s));
IdFtp1.Connect;
IdFtp1.put(st, 'instructions.dat');
finally
IdFtp1.Quit;
st.Free;
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var st: TMemoryStream;
s: string;
begin
st := TMemoryStream.Create;
try
IdFtp1.Connect;
IdFtp1.Get('instructions.dat',st);
st.Seek(0, soFromBeginning);
st.ReadBuffer(s,st.Size);
Memo1.Text := s;
finally
IdFtp1.Quit;
st.Free;
end;
end;

procedure TForm1.Button3Click(Sender: TObject);
var st: TMemoryStream;
s: string;
begin
s := Memo2.Text;
st := TMemoryStream.Create;
try
st.WriteBuffer(s,length(s));
st.Seek(0, soFromBeginning);
st.ReadBuffer(s,st.Size);
Memo1.Text := s;
finally
st.Free;
end;
end;


Ich versuche einen string in einen stream zu schreiben, ihn dann als datei auf einen ftp server hochzuladen, ihn dann wieder runterzuladen, wieder in einen string zu packen und anzuzeigen.
Leider bekomme ich beim Memo1.text := s; einen fehler, weil in s kein wert drinn steht. Es kommt also nicht das an was ankommen soll oder einfach garnix. :?
Im OnClick vom Button3 funzt es jedoch einwandfrei. (da hab ich den ftp up/download mal weg gelassen)
Wenn ich dateien auf den server hochlade und wieder runterlade geht das wunderbar!


Moderiert von user profile iconNarses: Topic aus Internet / Netzwerk verschoben am Fr 03.09.2010 um 19:21

_________________
wikisearch(UTFSE)!
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.


Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star
Administrator
Beiträge: 8150
Erhaltene Danke: 183

W2k, WXPpro
TP3 - D7pro
BeitragVerfasst: Fr 03.09.10 18:20 
Moin!

Das Problem ist hier nicht netzwerkbezogen, sondern liegt am Zugriff auf die Strings. :idea:

Zunächst mal die obligatorische Warnung vorab: Der generische Typ String ist nur bis (ausschließlich) Delphi 2009 ein AnsiString, hat also 1-Byte Zeichen, ab D2k9 ist das dann ein Unicodestring! Deshalb: entweder AnsiString nehmen oder besser nicht davon ausgehen, dass Strings 1 Byte pro Zeichen haben! :idea:

Hier ist der Fehler:
user profile icon>M@steR< hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext markieren
1:
2:
3:
4:
5:
6:
7:
  var st: TMemoryStream;
s: string;
begin
s := Memo2.Text;
st := TMemoryStream.Create;
try
st.WriteBuffer(s,length(s));
Damit greifst du nicht auf die String-Daten zu, sondern auf den Pointer, das ist natürlich nicht korrekt! Probier das mal so:
ausblenden Delphi-Quelltext markieren
1:
st.WriteBuffer(PChar(s)^, Length(s));
Und als Tipp: Du kannst den Memo-Inhalt auch direkt per .SaveToStream in den Stream schreiben. Abgesehen davon gibt´s auch noch den TStringStream. :idea: ;)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
>M@steR< Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 255
Erhaltene Danke: 2

Win7
Delphi 2005 PE (D7 Pro)
BeitragVerfasst: Fr 03.09.10 19:55 
:idea: :idea: :idea:
Rchtig! Der Stringstream! Mist, den hab ich total vergessen! Danke, jetzt klappt das wunderbar! :dunce:

_________________
wikisearch(UTFSE)!
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
home home