Новая строка после всех загруженных элементов в списке (C #) - PullRequest
0 голосов
/ 07 мая 2018

Итак, я хочу что-то вроде:

item1

item2

но я получаю:

item1item2

Пожалуйста, помогите!

Мой текущий код:

TextWriter txt = new StreamWriter("IP.txt");
foreach (var item in listBox1.Items)
{
    txt.WriteLine("\n" + item.ToString());
    txt.Close();
}

listBox1.Items.Clear();
TextReader reader = new StreamReader("IP.txt");

listBox1.Items.Add("\n" + reader.ReadToEnd());
reader.Close();

Ответы [ 4 ]

0 голосов
/ 07 мая 2018

См. Код ниже. В вашем оригинале было несколько ошибок:

  1. Вы закрываете txt внутри цикла, используемого для записи элементов списка в текстовый файл.

  2. Вам не нужно \n в txt.WriteLine("\n" + item.ToString());. WriteLine обеспечивает перевод строки

  3. Вам необходим цикл для чтения текстового файла и повторного добавления каждой строки обратно в список

  4. Я предлагаю вам использовать using, чтобы обеспечить закрытие файлов и удаление объектов в случае сбоя программы по какой-либо причине

Примечание: я добавил " text from file" к тексту, добавленному обратно в список, чтобы продемонстрировать, что список был загружен из текстового файла

listBox1.Items.Add("Item1");
listBox1.Items.Add("Item2");

 using (TextWriter txt = new StreamWriter("IP.txt"))
 {
     foreach (var item in listBox1.Items)
     {
         txt.WriteLine(item.ToString());
     }
 }

 listBox1.Items.Clear();

 using (StreamReader inputFile = File.OpenText("IP.txt"))
 {
     while (!inputFile.EndOfStream)
     {
         listBox1.Items.Add(inputFile.ReadLine() + " text from file");
     }
 }

enter image description here

0 голосов
/ 07 мая 2018

ReadToEnd () читает все символы от текущей позиции до конца текстового читателя и возвращает их как одну строку. Вместо этого используйте это:

string[] lines = File.ReadAllLines("IP.txt");

Это будет иметь все ваши строки. Теперь вы можете перебирать массив и создавать элементы списка.

0 голосов
/ 07 мая 2018

Избавьтесь от Reader / Writer, но используйте File и позвольте .Net решить задачу за вас:

Запись в файл:

File.WriteAllLines("IP.txt", listBox1
  .Items
  .OfType<Object>() 
  .Select(item => item.ToString()));

Чтение из файла:

listBox1.Items.Clear();

listBox1.Items.AddRange(File.ReadAllLines("IP.txt"));
0 голосов
/ 07 мая 2018

Используйте Environment.NewLine вместо "\n":

TextWriter txt = new StreamWriter("IP.txt");
foreach (var item in listBox1.Items)
{
    txt.WriteLine(Environment.NewLine + item.ToString());
    txt.Close();
}

listBox1.Items.Clear();
TextReader reader = new StreamReader("IP.txt");

listBox1.Items.Add(Environment.NewLine + reader.ReadToEnd());
reader.Close();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...