2016-05-13 2 views
0

J'ai un problème, j'écris des données dans le fichier save.txt, mais dans le fichier est seulement le dernier élément que j'écris.C# a seulement écrit la dernière chaîne

Ceci est mon code:

SetLine("save.txt", Obchod.numbers[0].ToString(), 5); 
SetLine("save.txt", Obchod.numbers[1].ToString(), 6); 
SetLine("save.txt", Obchod.numbers[2].ToString(), 7); 
SetLine("save.txt", Obchod.numbers[3].ToString(), 8); 
SetLine("save.txt", Obchod.numbers[4].ToString(), 9); 
SetLine("save.txt", Obchod.numbers[5].ToString(), 10); 
SetLine("save.txt", Obchod.numbers[6].ToString(), 11); ` 

void SetLine(string filename, string text, int linenumber) 
{ 
    using (StreamWriter sw = new StreamWriter(@filename, false)) 
    { 
     for (int i = 0; i < linenumber; i++) 
     { 

     } 

     sw.WriteLine(text); 
     sw.Close(); 
    } 
} 
+2

Votre boucle est vide. – Renan

+0

@Renan Quelle boucle? –

+0

La boucle for, mais ils sont faux - la boucle n'est pas pertinente – wizzardmr42

Répondre

2

Vous fermeture et la réouverture du dossier entre chaque écriture. Soit le garder ouvert ou spécifier un paramètre à ajouter à ce lieu d'écraser (qui est par défaut)

+1

En fait, la valeur par défaut n'a pas d'importance, car il passe explicitement 'false' dans le paramètre append. –

+0

Ah - Je ne connais pas les paramètres de StreamWriter du haut de ma tête, donc je n'avais pas réalisé que c'était l'option d'ajout! – wizzardmr42

+0

Pas une réponse très bien expliquée à mon avis. Doit fournir un exemple de solution au moins – musefan

2

Vous passez false à la StreamWriter-constructor qui lui indique de ne pas ajouter le texte au fichier, mais pour remplacer tout le texte.

Je suppose que vous voulez réécrire un fichier texte et le dernier paramètre indique quelle ligne doit être écrasée. Ensuite, cela devrait le faire:

public static void ReplaceLine(string filename, string text, int linenumber) 
{ 
    string[] allLines = File.ReadAllLines(filename); 
    if (allLines.Length < linenumber) 
     return; // or ArgumentException? 
    allLines[linenumber - 1] = text; 
    File.WriteAllLines(filename, allLines); 
} 

Mais notez que ce n'est pas efficace d'utiliser cette méthode dans une boucle, car il sera toujours charger le fichier dans la mémoire, remplace une ligne et réécrit le fichier entier.