Delphi-PRAXiS

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;

Sascha L 17. Dez 2004 19:15

Re: Stream-Schreibfehler, ich dreh bald durch!
 
zum 1000. Mal: Das habe ich gemacht! Ich habe nirgendswo angegeben, dass ich nur C:\ angebe. So dumm bin ich nicht. Ich habe verdammt viel Ahnung von Delphi sonst würde ich ja nicht fragen und mich wundern, warum FileStream bei mir nicht geht.

Wenn man sich mal den ganzen Thread durchlesen würde und nicht nur den letzten Beitrag, dann sieht man, dass ich die Variable "s" habe, die den Dateinamen entählt. Und 'c:\' + s ist völlig in Ordnung und das habe ich angewendet (s. oben!).

Mitlerweile habe ich den Fehler gefunden, welcher aber nichts mit dem bisher gesagten zu tun hat, sondern wo ganz anders lag.

fkerber 17. Dez 2004 19:27

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

Erklärst du uns trotzdem, wo er war. Falls doch mal jemand dieses Problem bekommt.


Ciao Frederic

Gruber_Hans_12345 18. Dez 2004 12:55

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

Zitat von Sascha L
zum 1000. Mal: Das habe ich gemacht! Ich habe nirgendswo angegeben, dass ich nur C:\ angebe. So dumm bin ich nicht.

Zitat:

Zitat von Sascha L
Da habe ich einfach c:\ angegeben. Der "Ordner" existiert ja

Zitat:

Zitat von Sascha L
Ich habe verdammt viel Ahnung von Delphi sonst würde ich ja nicht fragen und mich wundern, warum FileStream bei mir nicht geht.

Warum probierst du dann, dem TFileStream beim constructor einen Integer mitzugeben, Jeder der auch nur etwas Ahnung von Programmieren hat, sieht, das das unter keinen Umständen funktionieren kann (so wie du es anwenden wolltest)

Zitat:

Zitat von Sascha L
Mitlerweile habe ich den Fehler gefunden, welcher aber nichts mit dem bisher gesagten zu tun hat, sondern wo ganz anders lag.

[/quote]
... Dann vermute ich mal der Fehler lag genau in folgendem Bereich ...
Delphi-Quellcode:
// hier steht noch Code, der damit nichts zu tun hat.

Sharky 18. Dez 2004 13:28

Re: Stream-Schreibfehler, ich dreh bald durch!
 
Ich glaube nicht das solch eine Wortwahl wie einige sie in diesem Thread verwenden dem guten Ton in der DP entspricht und bitte alle beteiligten beim nächsten mal etwas lockerer zu sein. :warn:
Danke :stupid:


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:03 Uhr.

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-2025 by Thomas Breitkreuz