Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TFileStream.Write / .Read (https://www.delphipraxis.net/35667-tfilestream-write-read.html)

StanY 10. Dez 2004 13:45


TFileStream.Write / .Read
 
Ich habe das Problem, dass ich per TFileStream eine Integervariable hineinschreibe, sie jedoch falsch ausglesen wird.

Write:
Delphi-Quellcode:
  try
    F := TFileStream.Create(FName,fmCreate); //ja, FName ist gesetzt
  finally
    Size := Length(Connection);
    WriteLn(Size); //LIEFERT 1 ZURÜCK
    F.Write(Size,SizeOf(Size));

    F.Free;
  end;
Read:
Delphi-Quellcode:
  try
    F := TFileStream.Create(FName,fmOpenRead); //ja, FName ist gesetzt
  finally
    Size := F.Read(Size,SizeOf(Size));
    WriteLn(IntToStr(Size)); //GIBT 4 AUS
   
    F.Free;
  end;
Was mache ich falsch?

edit: ui, hundertste Beitrag - er, Frage ^^

Dax 10. Dez 2004 13:47

Re: TFileStream.Write / .Read
 
So geht es:
Delphi-Quellcode:
  try
    F := TFileStream.Create(FName,fmOpenRead); //ja, FName ist gesetzt
  finally
    F.Read(Size,SizeOf(Size));
    WriteLn(IntToStr(Size)); //GIBT 4 AUS
   
    F.Free;
  end;
Die Methode TStream.Read gibt als Rückgabewert die Zahl der ausgelesenen Bytes ;)

StanY 10. Dez 2004 13:52

Re: TFileStream.Write / .Read
 
Danke (:.

Luckie 10. Dez 2004 14:03

Re: TFileStream.Write / .Read
 
Was sind das für seltsame Ressourcenschutzblöcke? :gruebel:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  fs: TFileStream;
  i: Integer;
begin
  fs := TFileStream.Create('d:\test.txt', fmCreate);
  try
    i := 36;
    fs.WriteBuffer(i, sizeof(Integer));
  finally
    FreeAndNil(fs);
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  fs: TFileStream;
  i: Integer;
begin
  fs := TFileStream.Create('d:\test.txt', fmOpenRead);
  try
    fs.ReadBuffer(i, sizeof(Integer));
    ShowMessage(IntToStr(i));
  finally
    FreeAndNil(fs);
  end;
end;
so wie ihr die da habt bringen sie absolut nichts.

StanY 10. Dez 2004 14:11

Re: TFileStream.Write / .Read
 
Naja, SizeOf(Size) und SizeOf(Integer) sind ja, da Size eine Integervariable ist, deckungsggliech?

Luckie 10. Dez 2004 14:14

Re: TFileStream.Write / .Read
 
Jupp. Hat aber nichts damit zu tun, dass dein Ressourcenschutzblock für den Popo ist und somit eigentlich keiner ist. Was wenn es beim Schreiben kracht? Dann fliegst du aus dem finally Abschnitt raus und wie geht es dann weiter?

Der finally Abschnittt ist dazu da, dass Code noch abgearbeitet wird, wenn im vorangegangenem try Abschnitt eine Exception aufgetreten ist.

jim_raynor 10. Dez 2004 14:15

Re: TFileStream.Write / .Read
 
Zitat:

Zitat von StanY
Naja, SizeOf(Size) und SizeOf(Integer) sind ja, da Size eine Integervariable ist, deckungsggliech?

Naja, ihm ging es aber mehr darum, was du vor und was du nach dem finally schreibst.

StanY 10. Dez 2004 14:37

Re: TFileStream.Write / .Read
 
Achso, okay. Danke (:.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:57 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