2016-08-17 4 views
1

Hier ist der Code.Wie ersetze ich einen Teil einer Zeile in einer Textdatei durch Benutzereingaben?

private void SaveButton_Click(object sender, EventArgs e) 
{ 
    string textBoxText = TextBox.Text; 

    var lines = File.ReadAllLines(@"F:\Bioshock2SP.ini"); 

    foreach(string line in lines) 
    { 
     if (line.Contains("VoVolume=")) 
     { 
      //This is where I get confused. 
      string settingLine = line; 
      string replaceline = (line.Replace(line, textBoxText)); 
      File.WriteAllText(@"F:\Bioshock2SP.ini", settingLine); 
     } 
     break; 
    } 

    MessageBox.Show("Setting saved!"); 
} 

Die Idee ist, für ein Spiel Teil einer Einstellung in einer Settings.ini Datei ersetzen Ich spiele in meiner Form der Benutzereingabe eines Textbox verwenden. Der Benutzer tippt eine Nummer ein, beispielsweise "1.56", und drückt dann die Schaltfläche "Speichern", um die vorhandene Zeile durch ihre Eingabe zu ersetzen. In diesem Fall ist diese Einstellung die Lautstärke.

Die Anwendung läuft vollständig, aber nach dem Speichern und gehen in die Einstellungsdatei wird meine Eingabe nicht gespeichert.

+0

Was sagt Ihnen der Debugger, wenn Sie den Code durchgehen? Haben Sie bestätigt, dass der Code in der Schleife überhaupt ausgeführt wird? –

+0

Jemand hat den ersten Teil der Frage bearbeitet, aber ich bin neu in C# Ich kenne die Grundlagen und ein bisschen mehr und das ist es auch schon. Ich weiß wirklich nicht, wie man Visual Studio sehr gut benutzt, ich werde herausfinden, wie man das macht und Sie wissen lassen, tut mir leid. – ShadyOrb09

+1

Legen Sie einen Haltepunkt für die 'string settingLine = line;' fest und führen Sie den Haltepunkt aus.Meine Wette ist, dass es dort nie aufhört, weil Ihre 'line.Contains' niemals wahr zurückgibt. –

Antwort

1

Die Art und Weise, wie Sie die Datei speichern, sollte sich ändern. Speichern Sie jede Zeile der Datei so, wie Sie sie erhalten, bearbeiten Sie sie bei Bedarf.

void SaveButton_Click(object sender, EventArgs e) 
{ 
    var textBoxText = TextBox.Text; 

    var lines = File.ReadAllLines(@"F:\Bioshock2SP.ini"); 

    using (var file = new StreamWriter(@"F:\Bioshock2SP.ini")) 
    foreach(string line in lines) 
    { 
     if (line.Contains("VoVolume=")) 
      file.WriteLine(line.Substring(0, 9) + textBoxText); // Writes something like 'VoVolume=1.56' 
     else file.WriteLine(line); // No editing required 
    } 

    MessageBox.Show("Setting saved!"); 
} 
+0

Das funktioniert perfekt, danke. – ShadyOrb09

1

Ich denke, es gibt ein paar verschiedene Dinge mit Ihrem Code sind:

  1. Ersetzen Funktion

    string replaceline = (line.Replace(line, textBoxText)); 
    

    nimmt ersetzen eine Zeichenfolge zu suchen und eine Zeichenkette, die es zu ersetzen . Ihr erstes Argument ist 'line', also würde es die ganze Zeile durch den Wert in textBoxText ersetzen. Ich nehme an, dass Sie nur einen Teil der Linie durch diesen Wert ersetzen möchten. In diesem Fall müssen Sie etwas wie line.Replace(searchString, textBoxText) verwenden, in dem Sie searchString zuvor als den Text definiert haben, den Sie ersetzen möchten. Wenn Sie nicht wissen, was dieser Wert ist, aber es gibt ein Muster, möchten Sie vielleicht mit regular expressions nachsehen, mit dem Sie ein Muster zum Suchen und Ersetzen definieren können.

  2. WriteAllText Funktion

    File.WriteAllText(@"F:\Bioshock2SP.ini", settingLine); 
    

    Diese Linie den gesamten Inhalt des BioShock2SP.ini mit dem Wert in settingLine ersetzen wird. Hier gibt es zwei Probleme.

    1. Einer ist, dass settingLine den gespeicherten Wert war, bevor Sie den Ersatz tat - so hat es nicht die Ergebnisse Ihrer ersetzen Betrieb enthalten. Sie sollten replaceline verwenden (vorausgesetzt, es wurde korrekt geändert).
    2. Auch wenn Sie das tun, ist der andere, dass File.WriteAllText wird die ganze Datei mit dem Wert in settingLine - was ist wahrscheinlich nicht das, was Sie wollen. Sie sollten besser die Zeile im Array ändern und File.WriteAllLines verwenden, um das gesamte Array erneut auszugeben - vorausgesetzt, die Datei enthält mehrere Zeilen.

Die Hinweise oben können Sie dies helfen zu lösen - richtig, die Frage aber zu beantworten, würde ich brauche eine Probe, um zu sehen, was die Datei aussieht, und die Muster, die Sie ersetzen wollen.

Verwandte Themen