Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi TFIleStream Read füllt Buffer nicht (https://www.delphipraxis.net/192162-tfilestream-read-fuellt-buffer-nicht.html)

EWeiss 23. Mär 2017 22:19

TFIleStream Read füllt Buffer nicht
 
Neues Problem neues Thema.

Mein Fortschritt

Delphi-Quellcode:
  if (GetPngAnimation(gp.PngList[SelectedIndex], anih)) then
  begin
    //if FOpen(PWideChar(wsFile), 0, 0, hFileIn) = 0 then
    FileStream := TFileStream.Create(wsFile, fmOpenRead);
    if FileStream.Handle <> 0 then
    begin
      DC := CreateIC('DISPLAY', nil, nil, nil);
      ImgHDC := CreateCompatibleDC(DC);

      hDIB := SKAERO_CreateDIBSection(ImgHDC, anih.Width * anih.Frame, anih.Height, 32);
      SelectObject(ImgHDC, hDIB);
      if GDIP_CreateFromHDC(ImgHDC, Graphics) = OK then
      begin
        BufferSize := FileStream.Size - anih.offset - sizeof(anih) + 1;
        SetLength(sBuffer, BufferSize);
        FileStream.Seek(anih.offset - 1, soFromBeginning);
        FileStream.Read(sBuffer, BufferSize);
        //if FGetAt(FileStream.Handle, anih.offset - 1, sBuffer) = S_OK then
        //begin
FileStream.Read füllt den Buffer nicht fehlt noch was, oder habe ich was übersehen ?

gruss

himitsu 23. Mär 2017 22:23

AW: TFIleStream Read füllt Buffer nicht
 
Erstmal hat TStream.Read doch einen Rückgabewert, den man auswerden könnte.

BlockRead und Co. werfen Exceptions, wenn nicht die volle angeforderte Anzahl gelesen wurde.

EWeiss 23. Mär 2017 22:25

AW: TFIleStream Read füllt Buffer nicht
 
Zitat:

Zitat von himitsu (Beitrag 1365393)
Erstmal hat TStream.Read doch einen Rückgabewert, den man auswerden könnte.

BlockRead und Co. werfen Exceptions, wenn nicht die volle angeforderte Anzahl gelesen wurde.

Ok sorry habe mich damit noch nicht beschäftig ist Neuland für mich.

Edit:
Die Rückgabe ist 0 und der sBuffer nicht gefüllt.

gruss

Zacherl 23. Mär 2017 22:29

AW: TFIleStream Read füllt Buffer nicht
 
Und es sollte
Delphi-Quellcode:
Read(sBuffer[0], BufferSize)
sein, sonst schreibst du an die falsche Adresse.

EWeiss 23. Mär 2017 22:29

AW: TFIleStream Read füllt Buffer nicht
 
Zitat:

Zitat von Zacherl (Beitrag 1365395)
Und es sollte
Delphi-Quellcode:
Read(sBuffer[0], BufferSize)
sein, sonst schreibst du an die falsche Adresse.

Arggghhh das hatte wir schon ;)
Danke dir.

gruss

himitsu 23. Mär 2017 22:34

AW: TFIleStream Read füllt Buffer nicht
 
Zitat:

Zitat von EWeiss (Beitrag 1365396)
Zitat:

Zitat von Zacherl (Beitrag 1365395)
Und es sollte
Delphi-Quellcode:
Read(sBuffer[0], BufferSize)
sein, sonst schreibst du an die falsche Adresse.


Seit einer ganzen Weile gibt es überladene Versionen der Read/Write-Methoden, welche direkt ein TBytes als Parameter annehmen.

Gut, jemand hat auch nicht angegeben, ob es sich hier um ein älteres Delphi handeln könnte.

Zacherl 23. Mär 2017 22:37

AW: TFIleStream Read füllt Buffer nicht
 
Zitat:

Zitat von himitsu (Beitrag 1365397)
Gut, jemand hat auch nicht angegeben, ob es sich hier um ein älteres Delphi handeln könnte.

Delphi 2010, habe ich aus dem anderen Thread im Kopf, also durchaus schon etwas älter :stupid:

EWeiss 23. Mär 2017 22:38

AW: TFIleStream Read füllt Buffer nicht
 
Zitat:

Zitat von Zacherl (Beitrag 1365398)
Zitat:

Zitat von himitsu (Beitrag 1365397)
Gut, jemand hat auch nicht angegeben, ob es sich hier um ein älteres Delphi handeln könnte.

Delphi 2010, habe ich aus dem anderen Thread im Kopf, also durchaus schon etwas älter :stupid:

JO aber gut das hat andere gründe.

gruss

himitsu 23. Mär 2017 22:50

AW: TFIleStream Read füllt Buffer nicht
 
Hmmm, keine Ahnung seit wann das da ist.
Irgendwann nach den Generics wurde das eingebaut, falls ich mich nicht irre, und 2010 ist auch schon ein kleines bisschen danach. :stupid:

TStream.Read sagt man "lies maximal soviele Bytes" und im Result sagt es dann, was es gelesen hat, also falls z.B. die Datei vorher zuende ist.

EWeiss 23. Mär 2017 22:53

AW: TFIleStream Read füllt Buffer nicht
 
Zitat:

TStream.Read sagt man "lies maximal soviele Bytes" und im Result sagt es dann, was es gelesen hat, also falls z.B. die Datei vorher zuende ist.
Bei mir hat er 0 zurück gegeben.

gruss


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