2016-03-18 6 views
-1

Ich werde versuchen, dies kurz zu machen. Ich mache ein Programm meiner eigenen Willen, als ein Dienstprogramm für ein Videospiel (Dark Souls II.) Teil von was das Programm macht, speichert Zeichen erstellt, um Textdateien und es kann auch Textdateien laden und überschreiben sie mit neue Informationen. Es muss die txt-Datei in ein Array teilen, die geändert werden kann, wenn es die Datei lädt - so kann es zu einem anderen speichern. Es gibt viele Code, also werde ich nur die relevanten Sachen, aber es gibt mir außerhalb der Grenzen an einem bestimmten Ort seit der Art, wie es speichert den Text Datei ist eine lange Linie, die ich nur mit Kommas teilen konnte.Kann TXT-Datei in C# nach dem Laden nicht speichern

private void btnChar_Click(object sender, EventArgs e) 
    { 
      string fullChar = full[0] 
       + full[1] 
       + full[2] 
       + full[3] 
       + full[4] 
       + full[5] 
       + full[6] 
       + full[7] 
       + full[8] 
       + full[9] 
       + full[10] 
       + full[11] 
       + full[12] 
       + full[13] 
       + full[14] 
       + full[15] 
       + full[16] 
       +full[17]; 
      FlexibleMessageBox.Show(fullChar); 
     } 
private void saveCharacterToolStripMenuItem_Click(object sender, EventArgs e) 
     { 
      SaveFileDialog saveFileDialog1 = new SaveFileDialog(); 
      saveFileDialog1.Filter = "Text Documents (.txt)|*.txt"; 
      saveFileDialog1.DefaultExt = ".text"; 
      saveFileDialog1.FilterIndex = 2; 
      saveFileDialog1.RestoreDirectory = true; 
      string fullChar = full[0] + ", " 
       + full[1] + ", " 
       + full[2] + ", " 
       + full[3] + ", " 
       + full[4] + ", " 
       + full[5] + ", " 
       + full[6] + ", " 
       + full[7] + ", " 
       + full[8] + ", " 
       + full[9] + ", " 
       + full[10] + ", " 
       + full[11] + ", " 
       + full[12] + ", " 
       + full[13] + ", " 
       + full[14] + ", " 
       + full[15] + ", " 
       + full[16] + ", " 
       + full[17] + ", "; 
      //Save file dialog for saving characters 
      try 
      { 
       if (saveFileDialog1.ShowDialog() == DialogResult.OK) 
       {   
        //Code to write the stream goes here. 
        File.WriteAllText(saveFileDialog1.FileName, fullChar);    
       } 
      } 
      catch (Exception etc) 
      { 
       MessageBox.Show("An error occured: " + etc.Message); 
      } 
     } 

     private void loadCharacterToolStripMenuItem_Click(object sender, EventArgs e) 
     { 
      OpenFileDialog openFileDialog1 = new OpenFileDialog(); 
      openFileDialog1.Filter = "Text Documents (.txt)|*.txt"; 
      openFileDialog1.FilterIndex = 2; 
      openFileDialog1.RestoreDirectory = true; 
      string fullChar; 
      if (openFileDialog1.ShowDialog() == DialogResult.OK) 
      { 
       //Code to write the stream goes here. 
       fullChar = openFileDialog1.FileName; 
       full = fullChar.Split(','); 
      } 
     }   
+0

_Es gibt mir außerhalb der Grenzen in einem bestimmten Ort _ wo? und darauf achten, wie das Array _full_ deklariert wird? – Steve

+0

Es ist die allererste Instanz von fullChar unter btnChar und auch unter saveChar fullChar string. Das vollständige [] ist tatsächlich öffentlich und sollte sich in dieses aufteilen, damit das Programm ein vorhandenes ändern und dann erneut speichern kann. Wenn Sie eine bessere Beschreibung benötigen oder möchte ich Ihnen das Programm senden, das ich kann. Es ist jedoch nicht veröffentlicht, weil es ziemlich groß ist und ich nicht darüber nachgedacht habe, wie ich es entworfen habe, als ich es geschrieben habe, so dass es chaotisch ist ... XD – snipem1438

+0

@ snipem1438 sollten Sie angeben, wie das Array 'full []' ist initialisiert. Ich vermute, dass es nicht der Größe 18 ist. – Kidiskidvogingogin

Antwort

1

Wenn Sie sich nicht sicher über die effektive Länge der vollen Reihe sind (sagen Sie 18 Elemente oder weniger), dann können Sie nicht blind annehmen, dass Sie alle 18 Elemente haben.

Stattdessen könnten Sie die string.Join Methode verwenden, um die Zeichenfolge, die Sie anzeigen oder schreiben wollen bauen

private void btnChar_Click(object sender, EventArgs e) 
{ 
    string fullChar = string.Join(",", full); 
    FlexibleMessageBox.Show(fullChar); 
} 

private void saveCharacterToolStripMenuItem_Click(object sender, EventArgs e) 
{ 
    SaveFileDialog saveFileDialog1 = new SaveFileDialog(); 
    saveFileDialog1.Filter = "Text Documents (.txt)|*.txt"; 
    saveFileDialog1.DefaultExt = ".text"; 
    saveFileDialog1.FilterIndex = 2; 
    saveFileDialog1.RestoreDirectory = true; 
    string fullChar = string.Join(", ", full);   
    //Save file dialog for saving characters 
    ...... 
} 

Aber die eigentliche Ursache für die Fehler-Datei ist in dem Code, den Inhalt der Datei zurückbekommen sollte. Nachdem Sie den Dateinamen abgerufen haben, müssen Sie ihn lesen.
Der eigentliche Code versucht einfach den Dateinamen zu teilen.

if (openFileDialog1.ShowDialog() == DialogResult.OK) 
{ 
    fullChar = File.ReadAllText(openFileDialog1.FileName); 
    full = fullChar.Split(','); 
} 
+0

Nicht blind angenommen, das war das erste, was ich versuchte, und es machte keinen Unterschied. Beim Laden und Versuch, die txt-Datei anzuzeigen, um sie zu ändern, wird sie weiterhin beschädigt. Es bricht im btnChar ein. Wenn ich das so mache, besteht der einzige Unterschied darin, dass es den Dateipfad anzeigt. Ich werde aber sagen, dass ich hätte Join für die Speicherung verwenden sollen, nur um es sauberer zu machen, also schätze ich diesen Vorschlag. – snipem1438

+0

Sorry, aber ich verstehe nicht. Das Array full wird als _string [] full = new string [18]; _? Was ist die genaue Fehlermeldung, die empfangen wird, wenn Sie string.Join es in der Methode btnChar? – Steve

+0

Nun, es gab mir immer noch Grenzen. Ich glaube, dass ich das behoben habe, aber jetzt zeigt es nur den Dateipfad, wenn ich nach dem Laden auf den btnChar klicke. Es sollte die FullChar-Zeichenfolge wie normal anzeigen. Es erstellt diese Zeichenfolge zufällig oder wenn es die Textdatei liest.Entschuldigung für die Verwirrung und nochmals vielen Dank für den Beitrittsvorschlag, ich habe es anderswo benutzt, bevor du es erwähnt hast und nicht einmal daran gedacht es hier zu benutzen, auch wenn es nur um es sauberer zu machen. – snipem1438