FileStream.Read anders als FileStream.Write

Nil18

Erfahrenes Mitglied
Hallo liebe Forumuser!

Ich habe bereits sehr viel gutes über dieses Forum gehört, ich hoffe Ihr könnt auch mir nun behilflich sein.

Mein Problem ist, dass scheinbar FileStream.Read anders arbeitet als FileStream.Write.
Ich möchte in einem Programm den Header einer JPG File anzeigen lassen, ihn ändern und wieder speichern.

Das Lesen funktioniert ohne Probleme, mit Offset 0 wird alles korrekt verarbeitet.
Nur beim Schreiben in die Datei, wird scheinbar, obwohl 0 als Offset angegeben ist, an die 1. Stelle nach dem Header gesprungen.

Ich habe dafür keine Erklärung, hoffe Ihr könnt mir helfen.
Hier mein Code:
Code:
byte [] Data;
...
FileStream fs = new FileStream(textBox1.Text, FileMode.Open, FileAccess.ReadWrite);
if (Data != null)
  Array.Clear (Data, 0, Data.Length);
Data = new Byte[3];

fs.Read(Data, 0, 3);  // Gibt mir FF D8 FF
Data[1] = Convert.ToByte("217"); // D8 auf D9 ändern
fs.Write(Data, 0, 3);
fs.Close();

Wenn ich mir die Datei dann in einem HEX Editor ansehe sieht sie wie folgt aus:
Vorher:
Code:
FF D8 FF E0 00 10 4A 46 49 46 00 01 01 01 00 48
Nachher:
Code:
FF D8 FF FF D9 FF 4A 46 49 46 00 01 01 01 00 48

Man sieht also, obwohl der Code derselbe ist - und der Header auch richtig gelesen- und nach dem Erhöhen sogar richtig angezeigt (D9 statt D8) wird, wird am Ende eine falsche Stelle beschrieben, obwohl der Offset derselbe ist.

Warum?

Ich verwende: Microsoft Visual Studio .NET 2003 mit .NET Framework 1.1

Grüße, Nil18
 
Zuletzt bearbeitet:
Hallo Leute!

Hab das Problem gelöst, sorry für den unnötigen Post!

Lösung:
Code:
byte [] Data;
...
FileStream fs = new FileStream(textBox1.Text, FileMode.Open, FileAccess.ReadWrite);
Data = new Byte[3];

fs.Read(Data, 0, 3);  // Gibt mir FF D8 FF
Data[1] = Convert.ToByte("217"); // D8 auf D9 ändern
fs.Seek(0, SeekOrigin.Begin);
fs.Write(Data, 0, 3);
fs.Close();

Gruß
 
Zurück