PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : binäre Dateien unter VB.NET speichern


Coh3r3nT
27.02.2004, 16:52
Hi,

ich habe ein Problem beim speichern von binären Dateien mit VB.NET.

Für ein altes DOS-Programm brauche ich binäre Eingabedateien, die ich
bisher mit TurboPascal7 (DOS) erstellt habe. Bei TP7 habe ich einfach meine Zahlenwerte (Typ Single)
in eine typisierte Datei vom Typ "Single" (4Byte) geschrieben. Mein DOS-Progi hat das
ohne weiteres akzeptiert.

Wenn ich nun mit der BinaryWriter-Klasse das gleiche unter VB.NET versuche kommt
zum einen von der Dateigröße her was anderes raus und mein Dos-Programm kanns nicht mehr
verarbeiten.

Gibt es unterschiede, wie TurboPascal unter DOS bzw. VB.NET binäre Dateien speichern (Little, BigEndain,irgendwas) ?
Gibt es noch andere Klassen zum speichern von binären Dateien ?

thanx for comments

Coh3r3nT


Vellas
27.02.2004, 21:11
Hi!

Nein in .NET gibt es keine andere Klasse. Aber das Problem kann nicht an .NET liegen. .NET schreibt/liest auch nicht mehr oder weniger Bytes, wenn der entsprechende Datentyp angegeben ist. Ich könnte mir noch einen Verwaltungsunterschied vorstellen, wehalb das nicht klappt...hatte das Prob noch nie....


Code-Hacker

Pulpapex
28.02.2004, 00:11
Hast du ein Codebeispiel? Ich könnte mir vorstellen, dass du aus Versehen Double-Werte schreibst. Fliesskomma-Literale sind nämlich per default vom Typ Double.
BinaryWriter writer = new BinaryWriter(fileStream);

// Write a Double.
writer.Write(0.0);

// Write a Single.
writer.Write(0.0F);

Coh3r3nT
28.02.2004, 16:55
Hi,

mein Code sieht so aus:


Dim i As Integer
Dim fs As New FileStream(filename,fileMode.Create)
Dim bw As New BinaryWriter(fs)

For i = CInt(endPixel.Text) To CInt(startPixel.Text) Step -1
bw.Write(CSng(c(i))
Next i

bw.Close()
fs.Close()


c(i) ist zwar ein Double-Array, aber die Werte konvertiere ich ja vor dem schreiben.

Ich habe auch schon versucht, mit dem Encoding in BinaryWriter zu arbeiten:

Dim bw As New BinaryWriter(fs, System.Text.Encoding.Unicode)

Aber auch das hat nichts gebracht.
Kann es sein, dass VB nach jedem bw.write sowas wie ein Leerzeichen einhängt ? Das würde auch die unterschiedliche Dateigröße erklären.

greets
Coh3r3nT

Pulpapex
29.02.2004, 22:08
Das Encoding beim BinaryWriter wirkt sich nur auf Text aus, also in welcher Kodierung C# Strings geschrieben werden. Leerzeichen werden bestimmt nicht angehängt. Wie hoch sind denn die Größenunterschiede, pro Single plus zwei Bytes?

Ansonsten guck dir mal die generierte Datei im Hex-Editor an. Das erste Bit eines Single ist das Vorzeichen-Bit. Wenn alle Werte >= 0 sind, müsste jedes vierte Byte <= 127 (0x7f) sein.


Gruß
Pulpapex

Coh3r3nT
16.03.2004, 21:45
Hi Pulpapex !

danke für den Tip mit dem Hexeditor. Ich hatte einen anderen Fehler, der mir Probleme bereitet hat. Mit dem BinaryWriter passt alles.

Nochmal danke für die Tips

Coh3r3nT