Ich versuche momentan ein Programm zu schreiben, das in einer Binärdatei eine bestimmte Zeichenabfolge durch eine andere, genauso lange ersetzen soll. Um das zu erreichen habe ich versucht mir eine kleine Methode zu schreiben, die mit Hilfe einer angegebenen Stelle, dem Text und dem Dateinamen in der entsprechenden Datei an der Stelle X den Text Y schreibt. Dazu benutze ich momentan folgenden Code:
Code:
private void WriteToFile(string Filename, string Text, int Position)
{
using (BinaryWriter Bwriter = new BinaryWriter(File.Open(Filename, FileMode.Open)))
{
Bwriter.Seek(Position, SeekOrigin.Begin);
Bwriter.Write(Text);
Bwriter.Close();
}
Ich denke, dass das etwas mit der Convertierung von ASCII Zeichen während dem Schreiben zu tun hat, da mein Programm z.B. aus einem Ê ein A mit einem Tilde (~) darüber macht. Um das zu verhindern, würde ich gerne direkt hexadezimalen Code anstelle von ASCII Code zum Ersetzen verwenden. Leider habe ich auch nach einigem Suchen nicht viel nützliches zu dem Thema in C# finden können und bitte daher, da ich mich selbst, wie schon erwähnt, nicht gut damit auskenne, um ein Codesniped, mit dem sich so etwas realisieren lässt.
Lange Rede, kurzer Sinn: Ziel ist es eine Methode zu haben, der ich die Position in der Binärdatei (ob das jetzt in Hexadezimal oder Dezimal ist, ist egal), einen hexadezimalen Code der an der entsprechenden Stelle geschrieben werden soll, ggf. den hexadezimalen Code der überschrieben werden soll (nur wenn nötig) und den Namen der Datei übergebe, damit diese das dann ausführt.
Ich beiße mir daran jetzt schon mehrere Tage die Zähne aus und währe dankbar für abhilfe
€dit:
Ich habe jetzt mal, nach langem zusammensuchen und in Anlehnung an dieses Tutorial:
Code:
private void WriteToFile(string Filename, string Text, int Position)
{
string ArrText = Text.Split(",".ToCharArray());
BinaryWriter Bwriter = new BinaryWriter(File.OpenWrite(Filename));
Bwriter.BaseStream.Position = Position;
foreach (string value in ArrText)
{
string hexOutput = String.Format("{0:X}", value);
Bwriter.Write(hexOutput);
}
Bwriter.Close();
}
Code:
string Filename = NameOfFile; //NameOfFile ist der String, der den Namen der Datei beeinhaltet
int Position = 0xF51EE;
string[] Text = "40,5A,00,CA,0F,00,00,00,00,00,00";
WriteToFile(Filename, Text, Position);
Code:
Bwriter.Write(hexOutput);

Außerdem fügt er, wie auf dem Bild zu sehen ist, vor den Hexwert noch die Länge des Strings (02) ein, was er eigentlich auch nicht soll. Ich habe vorher auch das selbe schon damit versucht, dem Content String 0x als Inhalt + die aktuelle Value der Schleife zuzuweisen, was aber mit dem selben Problem geendet hat.
Ich habe leider absolut keine Ahnung, was ich machen muss, damit der Binary Writer meinen Stringinhalt richtig in die Datei schreibe. Weiß von euch jemand, was ich falsch mache?
€dit2:
Ich habe das Problem jetzt selbst gelöst - es bestand darin dass man keine Hex Strings direkt in eine Datei schreiben kann, sondern sie zu Bytes bzw einem Bytearray konvertieren muss, damit sie richtig in eine Datei geschrieben werden können.






