Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Stream-Schreibfehler, ich dreh bald durch! (https://www.delphipraxis.net/35904-stream-schreibfehler-ich-dreh-bald-durch.html)

Sascha L 13. Dez 2004 16:13


Stream-Schreibfehler, ich dreh bald durch!
 
Hallo,

ich habe folgenden Code:

Delphi-Quellcode:
var
intIndex:integer;
anhang_stream: TFileStream;

for intIndex := 0 to (IdMessage1.MessageParts.Count-1) do begin

  if idMEssage1.MessageParts.Items[intIndex] is TIdAttachmentFile then begin
  s := (idMEssage1.MessageParts.Items[intIndex] as tIdAttachmentFile).Filename;
  anhang_stream := TFileStream.Create(intIndex);
  TidAttachmentFile(idMessage1.MessageParts.Items[intIndex]).SaveToStream(anhang_stream);
  // hier steht noch Code, der damit nichts zu tun hat.
  anhang_stream.Free;
  end;
Ich habe schon alles ausprobiert. anhang_strean.Destroy, anhang_stream.free (was man ja eigentlich nimmt). Ich habe es auch ganz weggelassen, aber jedes mal bekomme ich eine Fehlermeldung -> "Stream-Schreibfehler".

Ich habe bei TFileStream.Create auch schon mal einen Order + s angegeben. Er kann dann, wenn im Anhang 2 Dateien sind, nur die erste Speichern und bei der 2. kommt dann wieder der Fehler.

Andere Streams kann ich nicht verwenden, weil beim Compilieren sonst ein Fehler kommt, da man bei TidAttachment nur nen FileStream nehmen kann.

Ich hoffe ihr wisst, wo das Problem ist :?

Gruß
Sascha

jim_raynor 13. Dez 2004 16:28

Re: Stream-Schreibfehler, ich dreh bald durch!
 
Zitat:

Zitat von Sascha L
Ich hoffe ihr wisst, wo das Problem ist :?

Das einzigste was ich jetzt sehe ist, das bei TFileStream.Create ein Int als Paramater übergeben wird. Dachte immer, dass dort der Dateiname angegeben werden muss. :gruebel: Wichtig ist, dass keine neuen Verzeichnisse angelegt werden durch FileStream. Das Verzeichnis muss also schon vorhanden sein.

P.S: Die Genaue Fehlermeldung wäre nicht schlecht. Glaube nicht, dass er einfach nur Stream-Schreibfehler sagt ...

Sascha L 13. Dez 2004 16:33

Re: Stream-Schreibfehler, ich dreh bald durch!
 
int kann man auch angeben, aber wie gesagt, habe ich es auch schon mit dem direkten Dateinamen, etc. ausprobiert. Da habe ich einfach c:\ angegeben. Der "Ordner" existiert ja :D

Die genaue Fehlermeldung lautet: Stream-Schreibfehler :D

Tyrael Y. 13. Dez 2004 16:46

Re: Stream-Schreibfehler, ich dreh bald durch!
 
Zitat:

Zitat von Sascha L
int kann man auch angeben, aber wie gesagt, habe ich es auch schon mit dem direkten Dateinamen, etc. ausprobiert. Da habe ich einfach c:\ angegeben. Der "Ordner" existiert ja :D

Die genaue Fehlermeldung lautet: Stream-Schreibfehler :D

Du musst aber ne Datei angeben und nicht nen Ordner ;)

und wichtig die Datei muss existieren

shmia 13. Dez 2004 17:11

Re: Stream-Schreibfehler, ich dreh bald durch!
 
Schau dir mal den Konstruktor von TFileStream GANZ GENAU an.
Du brauchst einen Dateinamen und den Zugriffmode.
Delphi-Quellcode:
filename := Format('C:\attachment%d.txt',[intIndex]);
anhang_stream := TFileStream.Create(filename, fmCreate);
Die Datei muss nicht existieren, darf aber kein Verzeichnis sein. :zwinker:

Sascha L 13. Dez 2004 21:10

Re: Stream-Schreibfehler, ich dreh bald durch!
 
ach ne. das weiß ich auch. wer meinen text oben genau durchliest, sieht, dass ich "ordner +s" geschrieben habe.

wer den Code durch geht, sieht, dass der Variable s ein Dateiname vergeben wird. Und das klappt auch, aber nur, wenn im Anhang eine Datei ist. Bei der 2. gibt es wieder den Stream-Schreibfehler.

Wer lesen kann, ist klar im Vorteil ;)

Sascha L 17. Dez 2004 14:21

Re: Stream-Schreibfehler, ich dreh bald durch!
 
*push*

Gruber_Hans_12345 17. Dez 2004 14:27

Re: Stream-Schreibfehler, ich dreh bald durch!
 
Zitat:

Zitat von Sascha L
ach ne. das weiß ich auch. wer meinen text oben genau durchliest, sieht, dass ich "ordner +s" geschrieben habe.

wer den Code durch geht, sieht, dass der Variable s ein Dateiname vergeben wird. Und das klappt auch, aber nur, wenn im Anhang eine Datei ist. Bei der 2. gibt es wieder den Stream-Schreibfehler.

Wer lesen kann, ist klar im Vorteil ;)

Denken wäre aber noch besser !

Wenn du bei
Delphi-Quellcode:
TFileStream.Create(intIndex)
nur eine Zahl (Integer) angibst, dann wird ein Handle erwartet.
Da du aber dieses nicht hast, und auch nicht haben willst, mußt du es so machen wie shmia das geschrieben hat, das ist deine Lösung, hat nichts mit lesen zu tun sondern nur was mit DENKEN !!!!!

Sascha L 17. Dez 2004 14:34

Re: Stream-Schreibfehler, ich dreh bald durch!
 
Und wenn du auch lesen könntet, dann hättest du gelesen, dass ich DAS GEMACHT HABE!!!!!!!!!!!!!!!!!! Aber das auch nichts gebracht hat.

PISA.....

Gruber_Hans_12345 17. Dez 2004 16:24

Re: Stream-Schreibfehler, ich dreh bald durch!
 
Zitat:

Zitat von Sascha L
Und wenn du auch lesen könntet, dann hättest du gelesen, dass ich DAS GEMACHT HABE!!!!!!!!!!!!!!!!!! Aber das auch nichts gebracht hat.

PISA.....

Ja das mit Lesen ist nicht so leicht, kannst mir ja mal beibringen wenn du Zeit hast. Aber vielleicht probierst es in der zwischenzeit einfach mal das zu machen was dir die User hier Beibringen möchten.

Da du aber geschrieben hast
Zitat:

Zitat von Sascha L
int kann man auch angeben, aber wie gesagt, habe ich es auch schon mit dem direkten Dateinamen, etc. ausprobiert. Da habe ich einfach c:\ angegeben. Der "Ordner" existiert ja Very Happy

Die genaue Fehlermeldung lautet: Stream-Schreibfehler Very Happy

Du kannst und darfst nicht 'C:\' verwenden, da das ein Verzeichnis ist und KEINE Datei, du MUßT einen Dateinamen angeben.
Und wenn du "NUR" einen integer angibst, dann wird ein Handle erwartet, aber denn hast du nicht und brauchst auch nicht

Also ganz einfach :
Delphi-Quellcode:
  anhang_stream := TFileStream.Create('c:\Attachment_'+IntToStr(intIndex)+'.att', fmCreate);
  TidAttachmentFile(idMessage1.MessageParts.Items[intIndex]).SaveToStream(anhang_stream);
  // hier steht noch Code, der damit nichts zu tun hat.
  anhang_stream.Free;


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:54 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz