Entwickler-Ecke

Internet / Netzwerk - Dateien versenden mit Indy10


hibbert - Di 14.02.06 20:16
Titel: Dateien versenden mit Indy10
Hi,
ich habe leider noch nirgends Demos für Indy10 gefunden :evil: Naja, aber nun zu meinem Problem:
Ich habe Delphi 2005 Personal und möchte nun gerne mit Indy Dateien über das Internet verschicken. Mit Indy9 ging das so:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
with IdTCPClient1 do
  begin
    fs := TFileStream.Create(filename, fmOpenRead or fmShareDenyWrite); //Datei in FileStream einlesen
    Connect;  //und Verbindung herstellen
    try
      OpenWriteBuffer; //stellt sicher, dass alle Daten versendet werden
      try
        WriteStream(fs, true, true, 0); {das 2. true ist wichtig!, da es bewirkt, dass die Größe des Streams mittels WriteInteger zuerst verschickt wird}
        CloseWriteBuffer;
      except
        CancelWriteBuffer;
        raise;
      end;
    finally
      Disconnect;
      fs.Free;
    end;

Nur leider funktioniert dieser Code mit indy10 nicht mehr.

Beliebte Meldungem vom Compiler sind:
Der Compiler hat folgendes geschrieben:
[Fehler] Unit1.pas(131): E2003 Undefinierter Bezeichner: 'OpenWriteBuffer'
[Fehler] Unit1.pas(133): E2003 Undefinierter Bezeichner: 'WriteStream'
[Fehler] Unit1.pas(134): E2003 Undefinierter Bezeichner: 'CloseWriteBuffer'
[Fehler] Unit1.pas(136): E2003 Undefinierter Bezeichner: 'CancelWriteBuffer'

wie kann ich nun mit Indy10 Dateien über das Internet verschicken ?

thx hibbert


UGrohne - Di 14.02.06 20:32

Alle Prozeduren zur Datenübertragung sind nun in der Klasse IOHandler untergebracht, schau mal nach, ob es dann funktioniert. Einfach IOHandler. vor die fraglichen Prozeduren stellen.


hibbert - Di 14.02.06 20:40

user profile iconUGrohne hat folgendes geschrieben:
Einfach IOHandler. vor die fraglichen Prozeduren stellen.

mhh sry weiß jetzt nicht genau was du damit meinst. Hört sich einfach an, ich weiß jetzt aber nicht was du meinst :oops:

hibbert


UGrohne - Di 14.02.06 20:43
Titel: Re: Dateien versenden mit Indy10
Versuch das ;-)

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
with IdTCPClient1 do
  begin
    fs := TFileStream.Create(filename, fmOpenRead or fmShareDenyWrite); //Datei in FileStream einlesen
    Connect;  //und Verbindung herstellen
    try
      IOHandler.OpenWriteBuffer; //stellt sicher, dass alle Daten versendet werden
      try
        IOHandler.WriteStream(fs, true, true, 0); {das 2. true ist wichtig!, da es bewirkt, dass die Größe des Streams mittels WriteInteger zuerst verschickt wird}
        IOHandler.CloseWriteBuffer;
      except
        IOHandler.CancelWriteBuffer;
        raise;
      end;
    finally
      Disconnect;
      fs.Free;
    end;


hibbert - Di 14.02.06 20:48

mhh leider immer noch genau der gleiche Fehler :cry:


UGrohne - Di 14.02.06 21:00

Dann probiers mal hiermit. Ich hab jetzt nur versucht das Ganze zum Kompilieren zu bringen, ich weiß nicht, ob es wirklich funktioniert. Die Prozedurnamen haben sich ein wenig geändert wie Du siehst. Außerdem gibt es WriteStream nicht mehr und die neue Methode benötigt einen TIdStreamVCL, den Du in der Unit IdStreamVCL findest. Das ist die Variable stream.

Einfach mal damit rumprobieren ;-)


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
with IdTCPClient1 do
  begin
    fs := TFileStream.Create(filename, fmOpenRead or fmShareDenyWrite); //Datei in FileStream einlesen
    stream := TIdStreamVCL.Create(fs,true);
    Connect;  //und Verbindung herstellen
    try
      IOHandler.WriteBufferOpen; //stellt sicher, dass alle Daten versendet werden
      try
        IOHandler.Write(stream, 0, true); {das 2. true ist wichtig!, da es bewirkt, dass die Größe des Streams mittels WriteInteger zuerst verschickt wird}
        IOHandler.WriteBufferClose;
      except
        IOHandler.WriteBufferCancel;
        raise;
      end;
    finally
      Disconnect;
      fs.Free;
    end;
  end;


hibbert - Di 14.02.06 21:07

Jo danke lässt sich compilieren, mal sehen wie es mit dem empfangen geht :wink: