AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Problem beim einlesen einer Datei in einen Stream

Problem beim einlesen einer Datei in einen Stream

Ein Thema von Chilled86 · begonnen am 13. Apr 2007 · letzter Beitrag vom 13. Apr 2007
Antwort Antwort
Seite 1 von 2  1 2   
Chilled86

Registriert seit: 8. Apr 2007
Ort: Quierschied
17 Beiträge
 
Delphi 2005 Personal
 
#1

Problem beim einlesen einer Datei in einen Stream

  Alt 13. Apr 2007, 09:31
Hi Leute,
hab leider wieder ein kleines Problem. Ich will eine Datei in einen Stream einlesen. Meine Pfadangabe stimmt auf jeden Fall, hab ich bereits gecheckt. Wenn ich es ausführe bekomme ich eine Exception der Klasse ERangeError "Fehler bei Bereichsprüfung". Ich kenne mich mit Streams nicht so gut aus und habe das ganze aus einem Tutorial. Kann mir einer sagen was ich falsch mache?


Delphi-Quellcode:
type
  TDatensatz = record
    ID: integer;
    Name: AnsiString;
  end;
  TDatenArray = array of TDatensatz;




procedure TForm1.Button1Click(Sender: TObject);
var
  Daten: TDatenArray;
  Stream: TStream;
  I: integer;
  Len: LongInt;
begin
  Stream := TFileStream.Create(Sett_QIPPath + '\Users\' + Sett_ICQNumber + '\History\' + HistoryData[2].FileName, fmOpenRead);
  try
    Stream.Read(Len, SizeOf(Len));
    SetLength(Daten, Len);
    for I := 0 to Len - 1 do begin
      Stream.Read(Daten[I].ID, SizeOf(Daten[I].ID));
      Stream.Read(Len, SizeOf(Len));
      SetLength(Daten[I].Name, Len);
      Stream.Read(PChar(Daten[I].Name)^, Len);
    end;
  finally
    Stream.Free;
  end;
  //ShowData(Daten);
end;
Sven Schellberg
  Mit Zitat antworten Zitat
Benutzerbild von ste_ett
ste_ett

Registriert seit: 10. Sep 2004
Ort: Dülmen
464 Beiträge
 
Delphi 7 Professional
 
#2

Re: Problem beim einlesen einer Datei in einen Stream

  Alt 13. Apr 2007, 09:34
An welcher Stelle tritt der Fehler auf?
Stefan
"Geht nicht!" ist keine Fehlerbeschreibung und "Hab ich schon versucht!" keine Antwort!

Hey, it compiles! Ship it!
  Mit Zitat antworten Zitat
Chilled86

Registriert seit: 8. Apr 2007
Ort: Quierschied
17 Beiträge
 
Delphi 2005 Personal
 
#3

Re: Problem beim einlesen einer Datei in einen Stream

  Alt 13. Apr 2007, 09:36
Weiß ich nicht genau, wenn ich auf Anhalten gehe, zeigt er mir leider nicht die Stelle an, bei der das ganze passiert.
Sven Schellberg
  Mit Zitat antworten Zitat
CCRDude
(Gast)

n/a Beiträge
 
#4

Re: Problem beim einlesen einer Datei in einen Stream

  Alt 13. Apr 2007, 09:37
Der Typecast zum PChar erscheint mir etwas umständlich... versuch doch stattdessen mal
[i]Stream.Read(Daten.Name[1], Len);

PS: Warum ist Len ein LongInt und kein LongWord/Cardinal? Erwartest Du negative Zeichenlängen?

PPS: Wenn man mit F7/F8 durchsteppt, merkt man doch, wann der Fehler erscheint
  Mit Zitat antworten Zitat
Chilled86

Registriert seit: 8. Apr 2007
Ort: Quierschied
17 Beiträge
 
Delphi 2005 Personal
 
#5

Re: Problem beim einlesen einer Datei in einen Stream

  Alt 13. Apr 2007, 09:42
Zitat von CCRDude:
Der Typecast zum PChar erscheint mir etwas umständlich... versuch doch stattdessen mal
[i]Stream.Read(Daten.Name[1], Len);
^^ Lässt Delphi und mein Tool crashen... Totalabsturz


Zitat von CCRDude:
PS: Warum ist Len ein LongInt und kein LongWord/Cardinal? Erwartest Du negative Zeichenlängen?
Stimmt auch wieder



Zitat von CCRDude:
PPS: Wenn man mit F7/F8 durchsteppt, merkt man doch, wann der Fehler erscheint
Hier stürzt das Teil ab
SetLength(Daten, Len);
***EDIT***
SizeOf gibt einen SmallInt zurück, kanns sein dass der zu klein is? Wenn ja, wie kann ich das denn anders lösen?
Sven Schellberg
  Mit Zitat antworten Zitat
Benutzerbild von TeronG
TeronG

Registriert seit: 19. Jul 2004
Ort: München
960 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Problem beim einlesen einer Datei in einen Stream

  Alt 13. Apr 2007, 09:46
Hab mit Streams auch noch net so viel gemacht aber evtl. isses ja nur:

var
Stream: TStream;
begin
Stream := TFileStream.Create(....);



BTW: hab mal gelesen, daß man aus gründern der Kompatibilität keine Generischen Typen Speichern soll. (Integer = Generisch -> nicht in jeder Delphiversion gleich)

EDIT: BTW: Sind die roten Kästen deaktiviert!?
龍 Der Unterschied zwischen Theorie und Praxis ist in der Praxis größer als in der Theorie.
  Mit Zitat antworten Zitat
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.426 Beiträge
 
Delphi 2007 Professional
 
#7

Re: Problem beim einlesen einer Datei in einen Stream

  Alt 13. Apr 2007, 09:52
Zitat von Chilled86:
Hier stürzt das Teil ab
SetLength(Daten, Len);
dann zeig dir mal den eingelesenen wert von Len an, ich vermute mal, das Len ein ungültiger wert ist (kleiner 0 oder viel zu groß)
Gruss Hans

2B or not 2B, that is FF
  Mit Zitat antworten Zitat
CCRDude
(Gast)

n/a Beiträge
 
#8

Re: Problem beim einlesen einer Datei in einen Stream

  Alt 13. Apr 2007, 09:56
Da TFileStream ein Enkel von TStream ist, dürfte das eigentlich kein Problem bedeuten.

Stream.Read(stringvariable[1], stringlaenge) benutze ich vielfach problemlos.

SizeOf(was?) gibt einen SmallInt zurück?

Zitat von TeronG:
BTW: hab mal gelesen, daß man aus gründern der Kompatibilität keine Generischen Typen Speichern soll. (Integer = Generisch -> nicht in jeder Delphiversion gleich)
Könnte ein Problem ergeben, sobald es einen Delphi-Compiler für 64 bit gibt. Dummerweise ist das noch in weiter Ferne Aber stimmt, daran sollte man jetzt schon denken.

Zitat von Chilled86:
Hier stürzt das Teil ab
SetLength(Daten, Len);
Was sagen denn die lokalen Ausdrücke (oder die Watch), wie groß Len zu diesem Zeitpunkt ist? Wenn es negativ wäre, wäre das ein guter Grund für den Fehler bei der Bereichsprüfung (siehe auch zwischenzeitlich erschienener anderer Beitrag).

Warum aber bei Dir SizeOf(Len) = SizeOf(SmallInt) und nicht SizeOf(LongInt) (wenn ich das jetzt richtig verstanden habe) kann ich auch nicht beantworten
  Mit Zitat antworten Zitat
Chilled86

Registriert seit: 8. Apr 2007
Ort: Quierschied
17 Beiträge
 
Delphi 2005 Personal
 
#9

Re: Problem beim einlesen einer Datei in einen Stream

  Alt 13. Apr 2007, 09:59
Zitat von Gruber_Hans_12345:
dann zeig dir mal den eingelesenen wert von Len an, ich vermute mal, das Len ein ungültiger wert ist (kleiner 0 oder viel zu groß)
Len ist 757935405
Sven Schellberg
  Mit Zitat antworten Zitat
lizardking

Registriert seit: 2. Sep 2005
76 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Problem beim einlesen einer Datei in einen Stream

  Alt 13. Apr 2007, 10:03
    Stream.Read(Len, SizeOf(Len)); An der Stelle sollte es eigentlich schon knallen. Versuch mal

    Stream.Read(@Len, SizeOf(Len));
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 01:29 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