Entwickler-Ecke

IO, XML und Registry - Per FileStream Daten in ein belieb. Array laden


Chryzler - Sa 14.07.07 18:20
Titel: Per FileStream Daten in ein belieb. Array laden
Hi!

Ich hab jetzt schon öfters das Problem gehabt, per FileStream den Inhalt einer Datei zu laden bzw. zu schreiben, genauergesagt bei der Typumwandlung. FileStream kann immer nur in ein byte[] laden/schreiben, was mach ich aber zum Beispiel bei einem int[,]? Casten funktioniert nicht. Muss ich da jetzt wirklich in einer Schleife immer 4 Bytes im Puffer erst in einen Integer umwandeln (wüsste nichtmal wie das gehen soll)?

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
int[,] grid = new int[99];

FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
byte[] buf = new byte[sizeof(grid)];  // merke gerade, dass sizeof(grid) nicht mal geht.. omg
fs.Read(buf, 0sizeof(grid));        // da natürlich auch nicht
fs.Close();
grid = buf; // <- geht natürlich nicht, grid ist ein int[,] und buf ist byte[]

In der Datei, die gelesen werden soll, stehen die Integer als 4-Byte jeweils drin.

Bitte um Hilfe. :flehan:

Chryzler


Christian S. - Sa 14.07.07 18:58

Ich sehe keine andere Möglichkeit, als da in einer Schleife durchzulaufen.

Vier Bytes in einen Integer umwandeln kannst Du mit BitConverter.ToInt32.

Grüße
Christian


Chryzler - Sa 14.07.07 19:52

Ah ok, vielen Dank! Ich habs jetzt so gemacht:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
byte[] buf = new byte[324];
fs.Read(buf, 0324);
fs.Close();
for (int y = 0; y < 9; y++)
    for (int x = 0; x < 9; x++)
        grid[x, y] = BitConverter.ToInt32(buf, (y * 9) + x);