AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Datei mit FileStream auslesen

Ein Thema von delphinewbie · begonnen am 27. Aug 2010 · letzter Beitrag vom 10. Sep 2010
Antwort Antwort
delphinewbie

Registriert seit: 27. Aug 2010
47 Beiträge
 
#1

AW: Datei mit FileStream auslesen

  Alt 27. Aug 2010, 10:14
Hi DeddyH,
ne, hat nicht geholfen. Der Zeiger wird doch aber nicht verändert, wenn ich die Datei nur hintereinander auslese, oder ? Und wie gesagt, die Datei wird ja auch richtig ausgelesen.
Die Fehlermeldung kommt erst beim Beenden des Programms , also der xxx.exe.
Es sieht ja fast so aus, als ob dann beim Programmbeenden eine unzulässige Adresse angesprochen wird. Aber wieso ?
Gibt es eigentlich noch andere Möglichkeiten außer mit TFileStream, derartige Dateien auszulesen ? Den Dateien kann man auch keine konstante Struktur zuordnen, sodass man mit records hätte arbeiten können.
Das Problem dabei ist ja, dass die Dateilänge nie gleich ist, abhängig davon z.B. wie lang Kommentare sind oder wieviele Datenkanäle abgespeichert wurden. Diese Angaben finde ich immer erst direkt in der Datei, aber das funktioniert ja auch richtig. Nur eben das Ende...

Vielen Dank
  Mit Zitat antworten Zitat
delphinewbie

Registriert seit: 27. Aug 2010
47 Beiträge
 
#2

AW: Datei mit FileStream auslesen

  Alt 27. Aug 2010, 10:20
@Gausi,
danke, aber ich bekomme die gleiche Fehlermeldung, nur sind die Adressen, bei denen die Zugriffsverletzung auftritt anders.

Ich bin ratlos
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#3

AW: Datei mit FileStream auslesen

  Alt 27. Aug 2010, 10:25
Zitat:
Delphi-Quellcode:
Length_of_Reserve_string : array[1..32] of byte;
...
Read(ds.Length_of_Reserve_string[i],sizeof(word));
Das Array ist 32 Byte groß, Du liest aber 64 Byte (Word = 16 Bit). Außerdem müsstest Du (wenn ich das richtig sehe) wohl erst das Byte-Array komplett befüllen und erst anschließend das String-Array.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
delphinewbie

Registriert seit: 27. Aug 2010
47 Beiträge
 
#4

AW: Datei mit FileStream auslesen

  Alt 27. Aug 2010, 10:54
ok, habe das array jetzt auf word gesetzt.

Length_of_Reserve_string : array[1..32] of word;
Reserve_string : array[1..32] of string;

Ich kann aber nicht erst das eine array füllen und dann das andere, weil die Reichenfolge beim Lesen eben so ist :
1. Lesen von 2 bytes (Länge L des nachfolgenden strings
2. Lesen von L*bytes ( der string selbst)
Oder habe ich dich falsch verstanden ?

Fehlermeldung bleibt leider immer die gleiche
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#5

AW: Datei mit FileStream auslesen

  Alt 27. Aug 2010, 11:00
Ob die Reihenfolge und die Datentypen so stimmen, weiß ich nicht, das hängt ja vom Dateiformat ab und nicht davon, wie Du den Record definierst.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
delphinewbie

Registriert seit: 27. Aug 2010
47 Beiträge
 
#6

AW: Datei mit FileStream auslesen

  Alt 27. Aug 2010, 11:22
genau, und wenn die Daten aber richtig eingelesen werden (Vergleichbarkeit ist vorhanden), muss ja wohl von der Seite her alles o.k. sein.
Trotzdem muss ich irgendwas vergessen haben.Vllt. muss Speicher freigegeben werden oder die Datei wird nicht korrekt 'geschlossen' ?

Ich werde mal noch ein bissl probieren...
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#7

AW: Datei mit FileStream auslesen

  Alt 27. Aug 2010, 11:26
Hallo Delphinewbie,

zunächst solltest Du Dich mit dem Debugger (Tasten:F7, F8, F4 F5) vertraut machen, da kann man meist sehen wohin was gelesen wird.

Dann verwendest Du z.B.

Length_of_Reserve_string : array[1..32] of word; 1. Du bist sicher das es nur max. 32 Strings gibt?
2. Da ich die Struktur in Deiner Datei nicht kenne, ein Vorschlag ins Blaue

Delphi-Quellcode:
Type
  mytype=record
           Feld1 : word;
           Feld2 : integer;
           ....
           textfeld : ansistring;
        end;
Den Weg den Du gewählt hast, halte ich für gefährlich, da zwei Werte die Länge eines Strings und der String selber in unterschiedlichen Variablen aufgenommen werden. Beide Werte gehören zusammen, und sollten nicht willkürlich getrennt werden.

Gruß
K-H

P.S.
Zitat:
Vllt. muss Speicher freigegeben werden oder die Datei wird nicht korrekt 'geschlossen' ?
Dann sollte der Debugger erst recht bemüht werden!
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector

Geändert von p80286 (27. Aug 2010 um 11:30 Uhr)
  Mit Zitat antworten Zitat
blackfin
(Gast)

n/a Beiträge
 
#8

AW: Datei mit FileStream auslesen

  Alt 27. Aug 2010, 11:39
Auch wenn es mit dem Fehler nichts direkt zu tun hat:
Zusätzlich zu den genannten Dingen solltest du dir vielleicht überlegen, deinen Record-Typ nicht bytes zu nennen.

Ich weiss, standardmäßig ist bytes nicht definiert, aber der Name wäre mir zu generisch und würde mir Bauchschmerzen in Hinblick auf die Zukunft bereiten. Eventuell kommt es irgendwann deswegen zu sehr merkwürdigen Fehlern, die man nicht mehr wirklich versteht, ähnlich wie wenn man reserved words von SQL-Datenbanken als Feldnamen benutzt oder Vergleichbares.
Zudem kommt, dass der Name so wenig aussagekräftig ist, dass du vielleicht in einem halben Jahr nicht mehr weisst, warum das Ding "bytes" heisst, obwohl es ja die Struktur einer definierten Datei angibt und nicht nur "irgendwelche Bytes". Nenn das Ding lieber nach dem Typ der Datei, je nachdem was es ist. Also zum Beispiel: CustomerFileBytes TCustomerFileBytes oder was weiss ich sonst

Geändert von blackfin (27. Aug 2010 um 12:18 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.542 Beiträge
 
Delphi 12 Athens
 
#9

AW: Datei mit FileStream auslesen

  Alt 30. Aug 2010, 08:31
Wie sieht denn dein Code nun aktuell aus?

PS:
Code:
Read(ds.Length_of_Reserve_string[i],sizeof(word));
Hier ließt man ein WORD, aber die Variable ist nur ein BYTE groß.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.542 Beiträge
 
Delphi 12 Athens
 
#10

AW: Datei mit FileStream auslesen

  Alt 30. Aug 2010, 08:59
@Deddy: Dich kann man aber auch leicht übersehn.
Oder gibt's hier doch eine verteckte und ausversehen aktivierte "Ignorierenfunktion"?

@delphinewbie:
Die Art der Änderung kommt auch mit auf die Datei an.
Wenn in der Datei nur 1 Byte drinsteht, dann hilft es nichts, wenn beim Auslesen nun alles einheitlich 2 Byte (Word) ist.

Ideal wäre es wirklich, wenn man nochmal alles komplett, inkl. einer Beispieldatei oder der Deklarantion der Speicherroutine sehn könnte.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort


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 06:12 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz