Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Merkwürdiger Fehler bei filestream.write (https://www.delphipraxis.net/163734-merkwuerdiger-fehler-bei-filestream-write.html)

messie 13. Okt 2011 16:42

Delphi-Version: 5

Merkwürdiger Fehler bei filestream.write
 
Moin,

ich schreibe in einem Thread Daten in einen Filestream. Als Puffer habe ich TIdBytes (= TBytes bei D2009), jeweils etwa 2000 bytes mit einer sich wiederholenden Sequenz, die ich mir im Debugger auch anzeigen lassen kann.
Der Filestream schreibt aber jeweil an den Anfang
Zitat:

( N o t e n o u g h d a t a i n b u f f e r . ( 1 4 0 9 5 / 1 4 0 9 5 )
Der Rest wird mit Nullen beschrieben.

Liegt das an den TBytes? Werden die evtl. in einer Doppelbytestruktur verwaltet und können so nicht als "normale" Bytes geschrieben werden?
Der Compiler meckert jedenfalls nicht.
FileStream.write habe ich auch noch nie unter Win7/64 verwendet.

Grüße, Messie

Bummi 13. Okt 2011 17:24

AW: Merkwürdiger Fehler bei filestream.write
 
übergibst Du in der Art @MyBytes[0] ?

p80286 13. Okt 2011 17:37

AW: Merkwürdiger Fehler bei filestream.write
 
mit
Delphi-Quellcode:
fs.write(buffer[0],towrite);
sollte es eigentlich klappen.

Du hast buffer hoffentlich initialisiert?
(klar sonst zeigt der Debugger nur sauerkraut)

Gruß
K-H

hoika 13. Okt 2011 19:15

AW: Merkwürdiger Fehler bei filestream.write
 
Hallo,

setzt du vor dem Schreiben auch Position (zurück) auf 0 ?


Heiko

messie 14. Okt 2011 10:12

AW: Merkwürdiger Fehler bei filestream.write
 
Delphi-Quellcode:
while not terminated do
      begin
        bytecount := indyclient.IOHandler.InputBuffer.Size;
        indyclient.IOHandler.ReadBytes(vBufferIn, bytecount, false);
        FileStream.WriteBuffer(vBufferin,bytecount);

        synchronize(DisplayUpdate);
So mache ich das. Der Buffer sollte in seiner Größe von ReadBytes dimensioniert und auch initialisiert werden. Und die Ergebnisse sehen auch vernünftig aus beim Debuggen.

Die Position setze ich nicht auf 0, der Filestream wird mit fmcreate jedesmal neu erzeugt, auch der Dateiname ist jedesmal ein anderer.

Danke, Messie

p80286 14. Okt 2011 10:40

AW: Merkwürdiger Fehler bei filestream.write
 
Ich hätte noch gerne die Definition von vBufferIn gesehen.
Wenn es wirklich ein dyn Array ist, Solltest Du es immer mit vBufferIn[0] verwenden.

Gruß
K-H

messie 14. Okt 2011 11:02

AW: Merkwürdiger Fehler bei filestream.write
 
Zitat:

Zitat von p80286 (Beitrag 1130420)
(...)Solltest Du es immer mit vBufferIn[0] verwenden.

Danke, das funktioniert. Aber warum der Aufruf mit [0]? Eigentlich will der Filestream doch eine Variable und keinen Pointer.

Grüße, Messie

p80286 14. Okt 2011 11:24

AW: Merkwürdiger Fehler bei filestream.write
 
vBufferin[0] ist die erste "Adresse" im Puffer.
Wenn Du ein dyn Array verwendest ist VBufferIn nur der Pointer auf das Array.
Bei einem stat Array (
Delphi-Quellcode:
vBufferin : array [0..4095] of byte;
) ist VBufferin[0] ud VBufferin das gleiche.

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:52 Uhr.

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