PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme mit StreamReader


TommySZB
30.09.2003, 19:37
Hallo,
ich habe ein Problem mit StreamReadern. Ich versuche für meine MP3-Datenbank Tags der Version2 (1 geht schon) zu lesen und später zu schreiben. Ich habe dafür leider nur ein VB6 Beispiel gefunden, das sich so nicht portieren lässt. Der untenstehende Code funktioniert, liefert aber leider nicht alle ANSI-Zeichen zurück. Die 128 Zeichen bestehen dann nur aus TALB, die restlichen Zeichen ignoriert er einfach. Bei Zeichenweisem einlesen, erhalte ich zwar alle Textzeichen, die für die Länge der Felder wichtigen Zeichen enthalten jedoch wiederum nur den Wert 0. Wenn ich stattdess VB6 mit der Get Anweisung nutze, erhalte ich alle Zeichen, also auch die, von denen lediglich der ANSI Wert interessantist. Wichtig wäre hier zum Beispiel das Zeichen 27. Mit VB6 erhalte ich 14 als ANSI Wert, VB.NET bringt für das Zeichen 0. Wie geht das anders?
Die folgende Zeile habe ich so aus der mp3 Datei herauskopiert, danach der
Code.

Danke

TALB��� ���no titleTIT2������AudioTrack

Dim Pfad As String = "C:\02.mp3"
Dim Buffer(128) As Byte
Dim InfFile As New FileInfo(Pfad)
Dim FStr As New FileStream(Pfad, FileMode.Open, FileAccess.ReadWrite,
FileShare.None)
Dim ASCIIEncode As New System.Text.ASCIIEncoding()
FStr.Seek(10, SeekOrigin.Begin)
FStr.Read(Buffer, 0, 128)
FStr.Close()


Pulpapex
30.09.2003, 21:16
Das liegt am verwendeten Encoding. Du verwendest ASCIIEncoding (obwohl ich nicht sehe wo, du erzeugst es nur mit new). Mit ASCII werden nur die ersten 128 Zeichen interpretiert. Zeichen darüber werden, glaube ich, durch ein Fragezeichen ersetzt.

Welches Encoding nun das richtige ist, weiss ich leider auch nicht. Wahrscheinlich musst du eine der beiden statischen Encoding.GetEncoding-Methoden verwenden. Eine erwartet eine Codepage, die andere einen Encoding-Bezeichner. Es gibt auch noch die Encoding.Default-Eigenschaft. Damit könnte es auch funktionieren.

Zum Abspeichern von Text empfehle ich UTF8. Das macht am wenigsten Probleme und wird auch im Texteditor problemlos angezeigt.


Gruß
Pulpapex

Edit: ich sehe gerade, du möchtest ja eine Binärdatei auslesen. Warum benutzt du da nicht den BinaryReader? Texte kannst du Read oder ReadBytes auslesen und mit Encoding.GetString in einen String konvertieren. Den Rest liest du nicht als Text, sondern als den jeweiligen Datentyp aus.

TommySZB
30.09.2003, 21:21
Ich glaube aber, dass das Zeichen, was ich einlese ein ASCII 14 ist. Ich vermute auch, dass das Problem irgendwo in dem Bereich liegt, aber das eine Zeichen, was an 27. Stelle sein müsste ist definitiv ne 14 (mit VB6 getestet), also müsste es auch von ASCII gelesen werden können (da unter 128).

Steff
01.10.2003, 09:14
Vielleicht hilft das hier Dir weiter:

http://www.coding-board.de/board/showthread.php?s=&threadid=6577

TommySZB
01.10.2003, 09:41
Original geschrieben von Steff
Vielleicht hilft das hier Dir weiter:

http://www.coding-board.de/board/showthread.php?s=&threadid=6577

Würde der Fehler im encoden liegen hättest du recht.
Das Problem ist aber, dass der Fehler bereits beim Auslesen aus der Datei geschieht. Ich bekomme für die o.g. wichtige Stelle anstatt ne 14 ins Byte Array einfach eine 0. Das im Nachhinein in String umwandeln stellt dabei momentan noch die geringste Sorge dar.
Zumindest habe ich deinen Hinweis so verstanden, dass er sich auf das umwandeln in String bezieht.
Trotzdem Danke.

Thomas