2016-07-20 2 views
-3

J'ai créé un programme pour créer des bogues et j'ai un problème avec le texte qui n'est pas sauvegardé correctement.La rupture de fichier texte s'aligne lors de l'ouverture à l'aide de ReadAllLines() C#

Je dispose d'un fichier texte appelé TemplateTexts qui détient tout le texte pour chaque modèle, un modèle ressemble à ceci -

REQUIREMENTS 
- Example 

ADDITIONAL REQUIREMENTS 
- Example 
- Example 
-----COPY BELOW THIS LINE----- 

Lorsque le programme ferme il copie tout cela en 1 ligne d'un fichier texte. (ressemble à ceci)

REQUIREMENTS- Example ADDITIONAL REQUIREMENTS- Example - Example-----COPY BELOW THIS LINE----- 

Le fichier texte contient 20 lignes de modèles. Le modèle est enregistré en tant que 1 ligne de texte dans le fichier texte, mais quand je vais à nouveau ouvrir le programme, il transforme cette ligne de texte en plusieurs lignes de texte comme la façon dont il est affiché dans le premier exemple.

Une idée pourquoi cela pourrait-il se produire? ou est-il un meilleur moyen de sauvegarder chaque modèle dans un fichier texte, éventuellement en le séparant avec des drapeaux ou quelque chose?

Voici le code à mon programme:

public partial class Form1 : Form 
{ 
    static String buttonNamesPath = AppDomain.CurrentDomain.BaseDirectory + "/ButtonNames.txt"; 
    String[] ButtonNames = System.IO.File.ReadAllLines(buttonNamesPath); 
    static String buttonTextPath = AppDomain.CurrentDomain.BaseDirectory + "/ButtonText.txt"; 
    String[] ButtonText  = System.IO.File.ReadAllLines(buttonTextPath); 

    private void SetupTextField() 
    { 
     comboBox1.Items.Clear(); 
     comboBox2.Items.Clear(); 
     for (int i = 0; i < ButtonNames.Length; i++) 
     { 
      comboBox1.Items.Insert(i, ButtonNames[i]); 
      comboBox2.Items.Insert(i, ButtonNames[i]); 
     } 
    } 

    public Form1() 
    { 
     InitializeComponent(); 
     this.FormClosing += this.Form1_FormClosing; 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     SetupTextField(); 
    } 

    private void richTextBox1_TextChanged(object sender, EventArgs e) 
    { 

    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     string comboBoxText; 
     comboBoxText = comboBox1.SelectedItem.ToString(); 

     int strNumber; 
     int strIndex = 0; 
     for (strNumber = 0; strNumber < ButtonNames.Length; strNumber++) 
     { 
      strIndex = Array.FindIndex(ButtonNames, x => x.Contains(comboBoxText)); 
      if (strIndex >= 0) 
       break; 
     } 

     ButtonNames[strIndex] = textBox1.Text; 
     ButtonText[strIndex] = richTextBox2.Text; 
     SetupTextField(); 
    } 

    private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
    { 
     System.IO.File.WriteAllLines(buttonNamesPath, ButtonNames); 
     System.IO.File.WriteAllLines(buttonTextPath, ButtonText); 
    } 

    private void textBox1_TextChanged(object sender, EventArgs e) 
    { 

    } 

    private void label1_Click(object sender, EventArgs e) 
    { 

    } 

    private void button3_Click(object sender, EventArgs e) 
    { 
     richTextBox1.Text = ""; 
    } 

    private void button2_Click(object sender, EventArgs e) 
    { 

     string comboBoxText; 
     comboBoxText = comboBox2.SelectedItem.ToString(); 

     int strNumber; 
     int strIndex = 0; 
     for (strNumber = 0; strNumber < ButtonNames.Length; strNumber++) 
     { 
      strIndex = Array.FindIndex(ButtonNames, x => x.Contains(comboBoxText)); 
      if (strIndex >= 0) 
       break; 
     } 


     richTextBox1.Text = ButtonText[strIndex]; 
    } 

    private void label3_Click(object sender, EventArgs e) 
    { 

    } 
} 

J'ai aussi 2 fichiers texte appelés ButtonNames.txt et ButtonText.txt

+2

Décrivez comment vous émettez dans le fichier des sauts de ligne s'il vous plaît. –

+0

"Quand le programme se ferme": Quel programme? Le vôtre ou le bloc-notes? À quoi ressemble votre code pour écrire le fichier? En fait, en y réfléchissant, pouvez-vous décrire en termes simples et courts ce que vous entendez par "un bloc-notes"? Est-ce une fenêtre avec une icône bleue dans le coin supérieur gauche? –

+0

Je n'arrive pas à l'obtenir ... Le bloc-notes est-il incorrect ou votre application ne fonctionne pas correctement? – jcvegan

Répondre

2

Lorsque vous demandez à la RichTextBox pour sa propriété Text, il convertit les riches texte qu'il contient en interne à une chaîne de texte brut, et apparemment par défaut, il utilise \n pour traduire les fins de ligne. Le Bloc-notes ne reconnaît pas \n comme une fin de ligne (parce qu'il recherche la fin de ligne officielle de Windows de \r\n), de sorte qu'il affiche tout sur une seule ligne. Si vous souhaitez enregistrer avec \r\n pour les fins de ligne, utilisez string.Replace sur le résultat de RichTextBox.Text pour remplacer \n par \r\n.

Voir cette question et ses réponses pour plus de détails:

RichTextBox Newline Conversion?