AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi FileStream.Size ist negativ (Datei größer als 2GB)
Thema durchsuchen
Ansicht
Themen-Optionen

FileStream.Size ist negativ (Datei größer als 2GB)

Ein Thema von endeffects · begonnen am 19. Mär 2005 · letzter Beitrag vom 20. Mär 2005
Antwort Antwort
Seite 1 von 2  1 2      
endeffects

Registriert seit: 27. Jun 2004
450 Beiträge
 
#1

FileStream.Size ist negativ (Datei größer als 2GB)

  Alt 19. Mär 2005, 17:47
Hallo,

ich hab leider ein Problem beim Einlesen einer Datei (über 2GB) in einen FileStream,
wenn ich mit Hilfe von FileStream.Size die Größe des Streams ermittel möchte erhalte
ich einen negativen Wert. Reicht es diesen Wert in einen positiven umzuwandeln
oder muss eine andere Lösung erhalten?


MfG
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#2

Re: FileStream.Size ist negativ (Datei größer als 2GB)

  Alt 19. Mär 2005, 17:49
Hai endeffects,

welche Delphi-Version hast Du denn?
Gab es nicht bis D7 diese beschränkung?
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
endeffects

Registriert seit: 27. Jun 2004
450 Beiträge
 
#3

Re: FileStream.Size ist negativ (Datei größer als 2GB)

  Alt 19. Mär 2005, 17:52
ich habe D7
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#4

Re: FileStream.Size ist negativ (Datei größer als 2GB)

  Alt 19. Mär 2005, 18:55
Hmmm.... bei mir geht es ohne Fehler:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  blubb : TFileStream;
begin
  if (OpenDialog1.Execute) then
  begin
    blubb := TFileStream.Create(OpenDialog1.FileName,fmOpenRead);
    try
      ShowMessage (Format ('Dateigröße %d kB',[blubb.Size DIV 1024]));
    finally
      blubb.Free;
    end;
  end;
end;
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#5

Re: FileStream.Size ist negativ (Datei größer als 2GB)

  Alt 19. Mär 2005, 19:03
Schwierig.. speicherst du die Größe des Streams in einem Integer-Wert oder wird die as Integer-Wert verarbeitet? Wenn ja: unbedingt Int64 benutzen. Der generische signed-32Bit-Typ Integer geht nämlich nur bis 2^31-1 im positiven, also nur bis 2GB
  Mit Zitat antworten Zitat
endeffects

Registriert seit: 27. Jun 2004
450 Beiträge
 
#6

Re: FileStream.Size ist negativ (Datei größer als 2GB)

  Alt 19. Mär 2005, 19:33
hallo,

das problem wird durch die abfrage von filestream.size erzeugt,
der wert ist ja nunmal leider nur ein longint.

Delphi-Quellcode:
SrcStream:=TFileStream.Create(FileName,fmOpenread or fmShareDenyNone);
N:=SrcStream.Size;
  while N>0 do
    ...
im fall von N<0 multipliziere ich den wert momentan einfach mit -1,
ich vermute allerdings dass das so nicht ganz richtig ist *g
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#7

Re: FileStream.Size ist negativ (Datei größer als 2GB)

  Alt 19. Mär 2005, 19:40
Zitat von endeffects:
im fall von N<0 multipliziere ich den wert momentan einfach mit -1,
ich vermute allerdings dass das so nicht ganz richtig ist *g
Das wird spätestens bei $8000000 problematisch. Caste den Wert lieber auf einen vorzeichenlosen Typ gleicher Größe (Cardinal).
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#8

Re: FileStream.Size ist negativ (Datei größer als 2GB)

  Alt 19. Mär 2005, 19:41
Zitat von endeffects:
das problem wird durch die abfrage von filestream.size erzeugt,
der wert ist ja nunmal leider nur ein longint.
...
Also wenn ich mir den Code von TStream anschaue ist dort .Size als INT64 deklariert.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von Binärbaum
Binärbaum

Registriert seit: 19. Jan 2005
Ort: Elstra
764 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: FileStream.Size ist negativ (Datei größer als 2GB)

  Alt 19. Mär 2005, 19:55
IMHO sollte es reichen, Size nach LongWord zu casten, damit können Werte bis 2^32-1 dargestellt werden (entspricht 4GB). Ansonsten sollte man Int64 verwenden (falls die Datei noch größer ist).
Hier mal eine Funktion, die den negativen Wert in die richtige Entsprechung umrechnet:
Delphi-Quellcode:
function RealeGroesse(aSize: LongInt): Longword;
begin
  if aSize>=0 then Result:= aSize
  else Result:= 2147483647 + (aSize+2147483648);
end;
MfG
Binärbaum
There are exactly 10 kinds of people: those who understand binary, and those who don't.
---
"Software reift beim Kunden. Bei Hardware ist es anders: Hardware fault beim Kunden." - Rainer G. Spallek
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#10

Re: FileStream.Size ist negativ (Datei größer als 2GB)

  Alt 19. Mär 2005, 20:03
Zitat von Binärbaum:
Hier mal eine Funktion, die den negativen Wert in die richtige Entsprechung umrechnet
Man könnte das ganze kompatibler gestalten, indem man einen Int64 zurückgibt und eine überladene Funktion mit einem Int64 als Paramater schreibt (falls das Property von TFileStream in einer anderen Delphi-Version tatsächlich Int64 liefert...).

edit: ein Int64(Longword(aSize)) hätte es auch getan, die Additionen sorgen nur für Probleme bei aktivierten Overflow-Checks.

Delphi-Quellcode:
function HackIt(Size: Longint): Int64; overload;
{$IFDEF WIN32}
asm
        xor edx, edx
end;
{$ELSE}
begin
  Result := Longword(Size);
end;
{$ENDIF}

function HackIt(Size: Int64): Int64; overload;
{$IFDEF WIN32}
asm
  // fixme :)
end;
{$ELSE}
begin
  Result := Size;
end;
{$ENDIF}
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:20 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