Datei lese und schreib Problem



  • Also ich lese einen Datei aus doch in der 3 Zeile habe ich das Problem das es 0 bytes enthält und ich dadurch nicht ans ende der zeile komme was für mich aber sehr wichtig währe.

    Die Ziele sieht etwa so aus.

    Text||||||text2

    ich habe die NULL Bytes mal mit | dagestellt. Und dadurch komme ich nich mit

    FileStream Datei = new FileStream(openFileDialogDatei.FileName,FileMode.Open,FileAccess.Read);
    StreamReader reader = new StreamReader(datei);
    MessageBox.Showe(reader.ReadLine());

    nich text 2 sondern nur Text.

    Gut das war das lese Problem und jetzt habe ich noch eine schreib Problem.

    Ich habe diesen String

    0000000000000000000C0203FF0007B0

    Diesen möchte ich aber nicht als ASCII speichern sondern richtig Biner speichern. Ich weiß nur leider nicht wie ich das mit

    FileStream bin = new FileStream(savedir+"bin_"+Convert.ToString(count)+".bin",FileMode.Create,FileAccess.Write);
    StreamWriter writer = new StreamWriter(bin);
    writer.Write("0000000000000000000C0203FF0007B0");

    hin bekommen soll. Könnt ihr mit da evl. helfen?

    mfg

    Alexander



  • Alexander2k4 schrieb:

    Also ich lese einen Datei aus doch

    Erst einmal möchte ich Dich informieren, daß da Menschen am anderen Ende sitzen, die sich das durchlesen müssen, was Du so schreibst. Also währe es höflich, hin und wieder mal einen Punkt oder sogar ein Komma zu setzen. Und es gibt auch etwas, das man Code-Tags nennt.
    Zur Frage: Wenn Du schon weißt, daß es eine Methode StreamReader.ReadLine gibt, solltest Du einen Blick in die Hilfe werfen. Da gibt es noch andere Methoden, die mit "Read" anfangen ...

    Alexander2k4 schrieb:

    Diesen möchte ich aber nicht als ASCII speichern sondern richtig Biner speichern

    Was genau meinst Du? Alles, was Du speicherst, ist binär.



  • Ja sry war bissel in eile. Naja also ich wollte das halt nich direkt als text speichern. Ich habe einen string der aus Hex werten besteht. Und den möchte diese möchte ich auch so abspeichern. Das heißt das ich wenn in dem String z.b FF steht was also 255 dezi währen das er das als ASCI zeichen in die Datei schreibt.



  • Alexander2k4 schrieb:

    255 dezi währen das er das als ASCI zeichen in die Datei schreibt.

    Also ich hätte vermutet, Du willst die 255 nicht als Zeichenketten-Repräsentation, sondern direkt als Bitmuster ablegen. Dafür könntest Du die Hex-Repräsentation des Wertes in ein ein byte-Objekt umwandeln und es via BinaryWriter in die Datei schreiben.



  • Danke das währe meine nächte Frage gewesen. 😃 Nur grade ist es so das ich den header mit Readbyte auslese das NULL bytes vorhanden sind. Und die benötigen stellen das speichern. Dann habe ich einen anreihung von Zahlen die ich dann nach Hex umwandeln was auch super klapt. Nur muss ich dem User ja irgent wie die Infos aus der Header zeigen. Und mit:

    32 2E 30 30

    als Revisions Nummer kann er eyer weniger anfangen einen 2.00 ist da glaube ich schon besser 🙂

    Ok dann werde ich keine Zeit zu vergeuden erstmal die Datei schreiben und evl. später mal den Header anzeigen. Würde mich aber Trotzdem über einen Antwort freuen 🙂



  • Nebenfrage : Wie wandele ich hex in byte und dez um?



  • Also wenn dein Hex bei der selben Länge bleibt wie du gepostet hast, kannst du es so machen:

    string str = "322E3030";
    byte[] s = new byte[4];
    s[0] = str.subString(0,2);
    s[1] = str.subString(2,4);
    s[2] = str.subString(4,6);
    s[2] = str.subString(6,8);



  • Das lauft bei mir nicht:

    1. Kann er string nich in byte umwandeln was ich aber mit

    Convert.ToByte(str.subString(0,2));

    geändert habe.

    2. Bricht er beim 2 String mit der meldung ab das das Format nich stimmt.

    3. Mach ich doch so nur Folgendes:

    s[0] = 32
    s[1] = 2E

    oder nicht?



  • Hallo,
    also so wird es garantiert gehen, ABER wegen dem E macht er einen Aufstand, da HEX anders angeschrieben wird z.B. 0x007b:

    string str = "322E3030";
    byte[] s = new byte[4];
    s[0] = Convert.ToByte(str.Substring(0,2));
    s[1] = Convert.ToByte(str.Substring(2,2));
    s[2] = Convert.ToByte(str.Substring(4,2));
    s[3] = Convert.ToByte(str.Substring(6,2));

    wenn du das E gegen eine Zahl umtauscht gehts wunderbar 😉 Da du aber einen string in ne Zahl umwandeln gehts nicht, aber hier hast du schonmal einen Ansatz damit kannst du bisschen rumspielen.



  • Aber nach meiner rechnung sind:

    32 hex = 50 dez

    die Funkion giebt aber 32 zurück und das is ja dann nich ganz richtig.



  • Dann schau dir mal folgende Seite an, ist bestimmt das was du brauchst:
    http://www.codeproject.com/csharp/hexencoding.asp



  • Danke das hat mir sehr geholfen. Wenn ich jetzt noch hin bekomme einer der Werte in ASCII Zeichen zu bekommen bin ich glücklich 🙂


Anmelden zum Antworten