Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Tfilestream.write(buffer,30) (https://www.delphipraxis.net/46835-tfilestream-write-buffer-30-a.html)

der_boss 1. Jun 2005 11:35


Tfilestream.write(buffer,30)
 
Liebe Mitkämpfer,

ich möchte TFileStream.Write(Buffer,30) verwenden, was aber nicht geht, weil er Grütze reinschreibt.
Was mache ich falsch?

Funktionieren Tut:

Delphi-Quellcode:
    for i:=0 to length(outstream)-1 do begin
      ausdat.Write(outstream[i],2);
    end;
// mit outstream : array of word ; länge 30

nicht funktionieren tut:

Delphi-Quellcode:
ausdat.Write(outstream,30)
Also, wer ne Idee hat, ich bin dankbar im voraus!!

Der_Boss

[edit=Luckie]Delphi-Tags Mfg, Luckie[/edit]

barf00s 1. Jun 2005 11:38

Re: Tfilestream.write(buffer,30)
 
was willst denn in den stream schreiben? nen string? nen integer?

strings schreibst so innen stream rein

Delphi-Quellcode:
stream.write(length(deinstring), 4); // 4 = sizeof(integer)
stream.write(pointer(deinstring)^, length(deinstring));
od.
Delphi-Quellcode:
stream.write(deinstring[1], length(deinstring));

zahlen schreibst so innnen stream

Delphi-Quellcode:
stream.write(zahl, sizeof(zahl)); // wenn deine zahl nen integer iss, dann is sizeof = 4, beinem double isses schon 8, also die speichergröße der variable :)

öhm ja..

[edit=Luckie]Delphi-Tags Mfg, Luckie[/edit]

Thebe 1. Jun 2005 11:42

Re: Tfilestream.write(buffer,30)
 
Zitat:

nicht funktionieren tut:

ausdat.Write(outstream,30)


Also, wer ne Idee hat, ich bin dankbar im voraus!!
Probier

ausdat.Write(outstream[0], Length(outstream) * sizeOf(word));

barf00s 1. Jun 2005 11:42

Re: Tfilestream.write(buffer,30)
 
machmer das lesen gleich noch mit, bevord fragst :)

Delphi-Quellcode:
procedure ReadStringFromStream(Stream: TStream; var sText: string);
var
  sText: string;
  iLength: integer;

begin
  Stream.Read(iLength, 4);
  SetLength(sText, iLength);
  Stream.Read(Pointer(sText)^, iLength); // oder wieder Stream.Read(sText[1], iLength);
end;
records fungsionieren in der regel genauso wie primitive daten die'd lesen/schreiben willst, solang keine pointer oder strings drin vorkommen

also

Delphi-Quellcode:
type
  TRecord = record
    iZahl: integer;
    iBuchstabe: char;
    dMadde: double;
  end;

var
  xRecord: TRecord;
dann kannst

Delphi-Quellcode:
Stream.Write(xRecord, SizeOf(xRecord));
oder lesen...
Delphi-Quellcode:
Stream.Read(xRecord, SizeOf(xRecord));
Delphi-Quellcode:
SizeOf(xRecord) wäre in dem fall hier 13, da sizeof(iZahl) = 4 + sizeof(iBuchstabe) = 1 + sizeof(dMadde) = 8 = 13 :)
[edit=Luckie]Delphi-Tags Mfg, Luckie[/edit]

barf00s 1. Jun 2005 11:44

Re: Tfilestream.write(buffer,30)
 
ich sollte vorher vllt die frage richtig lesen ^^

MosiXXL 1. Jun 2005 11:55

Re: Tfilestream.write(buffer,30)
 
so gehts:

ausdat.Write(outstream[0],30) //Wenn das array auch eine Länge von 30 hat

barf00s 1. Jun 2005 11:59

Re: Tfilestream.write(buffer,30)
 
Zitat:

so gehts:

ausdat.Write(outstream[0],30) //Wenn das array auch eine Länge von 30 hat
aber auch nur wenn die elemente im array die speichergröße von einem byte haben, also byte, char, boolean, oder 'n enum

Boombuler 1. Jun 2005 13:15

Re: Tfilestream.write(buffer,30)
 
Kann es evtl sein das "outstream[0]" eine andere Ardresse hat als "outstream" an sich?
brauch sich ja nur um ein Byte verschieben und schon steht nur noch Mist in "ausdat"...

Greetz
Boombuler

barf00s 1. Jun 2005 13:25

Re: Tfilestream.write(buffer,30)
 
ausdat[0] ist das erste element von ausdat

... das nur "mist" in der dateisteht und kein plain text ist klar, da das array in binärer form gespeichert wird und nicht in textform :)

Boombuler 1. Jun 2005 14:03

Re: Tfilestream.write(buffer,30)
 
Zitat:

Zitat von barf00s
ausdat[0] ist das erste element von ausdat

Ist schon klar frage ist ob da vorher noch ein paar bytes vom Array belegt sind dann wäre Ausdat nämlich der Pointer zum Header und der kann den Inhalt beim auslesen verfälschen

Zitat:

Zitat von barf00s
... das nur "mist" in der dateisteht und kein plain text ist klar, da das array in binärer form gespeichert wird und nicht in textform :)

und ein guter Hex-Editor bastelt das auch gleich wieder um in Plaintext :) naja bei Integer / Cardinal etc werten eigentlich nich aber bei char gehts ganz gut...

Greetz
Boombuler


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:47 Uhr.
Seite 1 von 2  1 2      

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