Laden...

Speichern und Laden eines 2dArrays

Erstellt von Micha1809 vor 3 Jahren Letzter Beitrag vor 3 Jahren 257 Views
M
Micha1809 Themenstarter:in
3 Beiträge seit 2021
vor 3 Jahren
Speichern und Laden eines 2dArrays

Hallo liebe Comunety,

irgendwie komme ich bei dem Speichern des Arrays nicht weiter und ich kann meinen Knoten im Kopf nicht lösen.
Ich kann das Array zwar speichern aber das Laden der Daten und das schreiben in das Array klappt leider nicht.

Wieleicht kann mir einer von euch weiter helfen.

ich Danke euch schon einmal im vorraus.


    public static void Save(byte[,] Array)
    {
        FileStream fileStr = new FileStream("save.txt", FileMode.Create);
        BinaryWriter binWriter = new BinaryWriter(fileStr);
        for (int i = 0; i < 9; i++)
        {
            for (int j = 0; j < 8; j++)
            {
                binWriter.Write(Array[i, j]);
            }
        }
        binWriter.Close();
    }
  
  public static void Load(ref byte[,] Array)
    {
        FileInfo fileStr = new FileInfo("save.txt");
        FileStream fs = new FileStream("save.txt", FileMode.Open);
        byte[] Array01 = new byte[fileStr.Length];
        int height = 9;
        int width = 8;
        for (int i = 0; i < height; i++)
        {
            for (int j = 0; j < width; j++)
            {
                Array[i, j] = Array01[i + j];

            }
        }
        return;
    }

16.834 Beiträge seit 2008
vor 3 Jahren

Warum verwendest Du nicht einfach die fertigen Methoden der File-Klasse wie zB File.ReadAllBytes(String) Methode (System.IO)

"Klappt nicht" ist keine Fehlermeldung.
Bitte sagen, was nicht klappt und welche Fehlermeldung Du bekommst, siehe [Hinweis] Wie poste ich richtig? Punkt 5.

Sollte es ein Logikfehler sein, so kannst Du das eigentlich relativ schnell mit dem Debugger selbst heraus finden.
[Artikel] Debugger: Wie verwende ich den von Visual Studio?

PS: wenn Du mit Klassen wie Stream etc arbeitest, dann musst Du die Handles ordentlich schließen.
Daher am besten die Beispiele in den Dokus anschauen, dort siehst Du die korrekte Verwendung mit using().

C
55 Beiträge seit 2020
vor 3 Jahren

Hallo

Mir fallen spontan 2 Punkte auf, die etwas komisch sind. Du liest den Filestream in der Load Methode nie. Und zum anderen könnte es bei deiner Save und deiner Load Methode knallen, wenn das Array kleiner ist als die die Schleifen durchläufe -> IndexOutOFRangeException. for schleifen sollten idr so aussehen:


for(int i =0; i < myArray.Length; i++) 
{
 // your code...
}

Daneben würde ich bei Load das Array zurück geben statt, als zu referenz übergeben. Und selbst wenn du lasse so lassen möchtest gib wenigstens ein boolean zurück, aber nicht void.

Grüße

4.939 Beiträge seit 2008
vor 3 Jahren

Neben dem Gesagten von @Abt: beim Lesen greifst du bisher gar nicht auf die Daten des Streams zu (analog zum BinaryWriter benötigst du hier dann einen BinaryReader) - Array01 sowie die FileInfo-Instanz sind also überflüssig.

Außerdem solltest du keine Magic-Numbers verwenden, sondern mittels Array.GetLength(DIM) (mit DIM = 0, 1, ...) kannst du die Größen des Arrays auslesen.

M
Micha1809 Themenstarter:in
3 Beiträge seit 2021
vor 3 Jahren

Danke für eure Hilfe.
Jetzt habe ich es hin bekommen.