[GELÖST] TSTream macht Ärger?
Übersicht

CO2ehemals "SirMO"Betreff: [GELÖST] TSTream macht Ärger? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
Ich habe eine Funktion verfasst, damit das WriteString von BlitzBasic mit BlitzMax gelesen werden kann. Die Funktion brauche ich für mein Packager-Tool. Sie wird verwendet, um die Dateinamen der in dem Package befindlichen Dateien herauszufinden und aufzulisten. Leider erzeugt genau die Funktion den Fehler "Unhandled Exception: Error reading from stream", dabei wird die erste Zeile der Funktion markiert. Der Fehler tritt aber erst auf, wenn die Funktion aufgerufen wird (via "Container -> öffnen"), und auch da nicht direkt, sie liest erst noch den ersten Dateinamen aus. Hier ist einmal die Funktion: BlitzMax: [AUSKLAPPEN] Function ReadString2:String(filename50:TStream) Und hier einmal ihr aufruf: BlitzMax: [AUSKLAPPEN] Case 101 'öffnen (wird über "LoadPackage2()" aufgerufen, wenn ich den Code noch schicken soll, tue ich das, bin mir aber zu 99% sicher, das es nicht an "LoadPackage2()" liegt!) mfG, CO2 |
||
mfG, CO²
Sprachen: BlitzMax, C, C++, C#, Java Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti |
- Zuletzt bearbeitet von CO2 am Fr, Mai 13, 2011 23:44, insgesamt 2-mal bearbeitet
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ein Stream ist kein Dateipfad.
Edit: LoadPackage2() wäre also sinnvoll zu posten. |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
CO2ehemals "SirMO" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Er öffnet ja auch keine Datei, sie wird vorher mit "ReadFile()" geöffnet, und erst danach wird die Funktion aufgerufen.
BlitzMax: [AUSKLAPPEN] Function LoadPackage2(PackageFilePath:String) Das ist die Funktion. |
||
mfG, CO²
Sprachen: BlitzMax, C, C++, C#, Java Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Was mir direkt auffällt ist dass Du augenscheinlich ohne strict / superstrict arbeitest. Damit kaufst Du dir eine deutlich erhöhte Fehleranfälligkeit ein, und eine potentielle Verlangsamung deines Codes.
Ansonsten fiele mir - ohne Kenntnis deines Package-Formates- nur ein mittels einiger Debuglog-Ausgaben zu ermitteln was denn beim ersten Mal noch eingelesen wird, die Filepos etc. ausgeben zu lassen. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bau an passenden Stellen Sicherheitsprüfungen ein:
BlitzMax: [AUSKLAPPEN] Local PackageFile:TStream = ReadFile(PackageFilePath)Das grenzt die Fehlerquelle ein. |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also wenn der erste Dateinamen noch richtig ausgelesen werden kann, dann könnte es ja einfach sein, dass die Schleifen-Abbruch-Bedingung BlitzMax: [AUSKLAPPEN] Until Eof(PackageFile)nicht rechtzeitig erfüllt wird. Ich tippe mal darauf, dass der Fehler hier liegt BlitzMax: [AUSKLAPPEN] PackagePos = PackagePos + dateigroesse mfG Holzchopf |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
CO2ehemals "SirMO" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ok, werde mal Sicherheitsabfragen einbauen Danke euch!
EDIT: Habe meinen Code nun mit LOG - Einträgen gefüllt: BlitzMax: [AUSKLAPPEN] Function LoadPackage2(PackageFilePath:String) 'FUNKTIONIERT NOCH NICHT! Nur wird nichts in die Datei reingeschrieben, d.h.: Der fehler muss noch vor dem ersten durchlauf der Schleife kommen. |
||
mfG, CO²
Sprachen: BlitzMax, C, C++, C#, Java Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti |
![]() |
Hummelpups |
![]() Antworten mit Zitat ![]() |
---|---|---|
oder es komt nicht zum closefile weil erst dann die geschriebenen lines gespeichert
werden. warum machst du auch hier wieder nicht das, was dir geraten wird und nutzt debuglog? Meine Güte |
||
blucode - webdesign - Ressource - NetzwerkSim
BlitzBasic 2D - BlitzMax - MaxGUI - Monkey - BlitzPlus |
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich möchte hier auch noch einmal Werbung für ein Modul machen:
https://www.blitzforum.de/foru...hp?t=36857 Damit kannst du feststellen, was mit dem Stream gemacht wird. Ein weiterer Hinweis: Debug-Meldungen solltest du immer mit "FlushStream" 'bestätigen'! Normalerweise werden die Daten nämlich gepuffert und gehen bei einem Programmabsturz verloren. mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
CO2ehemals "SirMO" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ok, das Mysterium ist gelöst! Es lag anscheinend an "SeekStream()", habe es durch eine andere (evtl. weniger schnelle) methode ersetzt: BlitzMax: [AUSKLAPPEN] Function LoadPackage2(PackageFilePath:String) 'FUNKTIONIERT! Ich danke allen für die Tatkräftige Hilfe! mfG, CO2 |
||
mfG, CO²
Sprachen: BlitzMax, C, C++, C#, Java Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti |
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn du die Leseposition der beiden Varianten vergleichen würdest, würdest du feststellen, dass du einfach nur die Sprungposition falsch berechnest hast.
Hier springst du relativ zur aktuellen Position um dateigroesse Bytes nach hinten: BlitzMax: [AUSKLAPPEN] Local kontrolle = 0 Da du hier die vorherigen Lese-Befehle nicht beachtest, springst du im ersten Durchlauf auf die absolute Position "dateigroesse": BlitzMax: [AUSKLAPPEN] PackagePos = PackagePos + dateigroesse Richtig wäre "StreamPos(PackageFile)+dateigroesse" als Sprungposition, wenn du relativ springen möchtest: BlitzMax: [AUSKLAPPEN] SeekStream(PackageFile, StreamPos(PackageFile)+dateigroesse) -> Es lag nicht an SeekStream, sondern an der Positionsberechnung. Es ist schon eher selten, dass man in BlitzMax auf einen Fehler dieser Art stößt. ![]() mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
CO2 hat Folgendes geschrieben: Ok, das Mysterium ist gelöst!
Ja, und zwar schon seit meinem Posting hier, nachdem ich meine heilige Kristallkugel eingesetzt hatte und so den Fehler sah ![]() ![]() CO2 hat Folgendes geschrieben: Es lag anscheinend an "SeekStream()"
Kleiner Tipp: Nein ![]() Du liest einen String von Position x mit der Länge n Bytes, danach ein Integer (4 Bytes), dann die Datei (N Bytes) oder vllt. überspringst du die Datei auch (keine Ahnung, was AddFile macht) - also hast du von x aus n+4+N Bytes gelesen. Der nächste Eintrag (vermute ich) liegt demnach an Position x+n+4+N. Du springst aber an Position x+N, also n+4 Bytes zu wenig weit - an eine Stelle, wo "ReadString2" keinen schlauen String antreffen wird. Ich hoffe, das war ausführlich und verständlich genug... mfG Holzchopf |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
CO2ehemals "SirMO" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ok, nochmal danke für die erklärung ![]() Zur Erklärung: Ich benutze diese Lib. Die Funktion AddFile() fügt einfach eine neue "datenreihe" hinzu, d.h.: es erstellt einen neuen eintrag in der filelist. row ist einfach die variable der zeile. sie steht zu anfang auf 0. wird eine datei eingefügt, wird es in reihe 0 reingeschrieben, danach erhöht sich die variable row auf 1, usw. mfG, CO2 |
||
mfG, CO²
Sprachen: BlitzMax, C, C++, C#, Java Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group