2016-05-13 6 views
0

У меня проблема, я пишу некоторые данные в файл save.txt, но в файле это только последний элемент, который я пишу.C# только набрал последнюю строку

Это мой код:

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

Ваша петля пуста. – Renan

+0

@Renan Какой цикл? –

+0

Цикл for, но они неправильные - петля неактуальна – wizzardmr42

ответ

2

Вы закрытие и повторное открытие файла между каждой записью. Либо держать его открытым или задать параметр, добавляемых к нему, а не перезаписывать (который по умолчанию)

+1

По сути, значение по умолчанию не имеет значения, потому что он явно передаёт 'false' в параметр append. –

+0

А - Я не знаю параметров StreamWriter от верхней части головы, поэтому не понял, что это вариант добавления! – wizzardmr42

+0

Не очень хорошо объясненный ответ на мой взгляд. Должен предоставить пример решения по крайней мере – musefan

2

Вы передаете false к StreamWriter-constructor, который говорит, что это не добавляет текст в файл, но перезаписать весь текст.

Я думаю, вы хотите переписать текстовый файл, а последний параметр указывает, какая строка должна быть перезаписана. Тогда это должно сделать это:

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); 
} 

Но обратите внимание, что это не эффективно использовать этот метод в цикле, так как он всегда будет загружать файл в память, заменяет одну строку и переписывает весь файл.