Многоколоночные элементы списка в файл

#c# #winforms #file #listview #file-io

#c# #winforms #файл #listview #file-io

Вопрос:

Я работаю над своим небольшим приложением, и мне нужно получить элементы из listview и записать их в текстовый файл. Кто-нибудь знает, как это сделать? Пожалуйста, помогите мне.

=================================================================================

Например: в listview

 Name     | Password
Me       | YesNoYesNo
You      | NoYesNoYEs
Everybody| YESNoYESNo
  

В файле:

 ME|YesNoYesNo rn
You|NoYESNoYES rn
  

РЕДАКТИРОВАТЬ: Ребята, я забыл сказать вам, что я использую WPF. Извините.

Ответ №1:

Вот старый школьный способ сделать это и включить ваши разделители в файл:

 using (StreamWriter writer = new StreamWriter(@"C:Desktoptest.txt"))
{
    StringBuilder line = new StringBuilder();
    foreach (ListViewItem item in listView1.Items)
    {
        line.Clear();
        for (int i=0; i<item.SubItems.Count; i  )
        {
            if (i > 0)
                line.Append("|");
            line.Append(item.SubItems[i].Text);
        }
        writer.WriteLine(line);
    }
}
  

Комментарии:

1. Вы можете использовать ту же идею. Представления списка WPF более сложны. Я не могу точно сказать, как вы организовали свои столбцы.

Ответ №2:

Как насчет этого…Я надеюсь, что это вам поможет….

При любом событии, которое вызовет ваше сохранение: откройте файл, выполните итерацию по содержимому списка, записывая текст в файл, а затем закройте файл. Закрытие, конечно, может быть выполнено с помощью:

 using (var tw = new StreamWriter(filename)) {
     foreach (ListViewItem item in listView.Items) {
     tw.WriteLine(item.Text); 
  }
}
  

Ответ №3:

Вы можете записать как строку, так и байт, закройте файл, иначе иногда изменение не будет отражать:

 string tmppath = @".....temp.txt";
FileStream writefile = new FileStream(tmppath, FileMode.Open, FileAccess.Write);
//StreamWriter sw = new StreamWriter(writefile);//To write line
if (File.Exists(tmppath))
{
    foreach (ListViewItem itm in listView1.Items)
    {
        writefile.Write(uniEncoding.GetBytes(f.Text), 0,uniEncoding.GetByteCount(itm.Text));
        //OR
        //sw.WriteLine(itm.Text);
    }
writefile.Close();
//OR
//sw.Close();
  

Комментарии:

1. Используйте streamwriter и writeline, которые я привел в приведенном выше коде, он будет записывать каждый элемент в новую строку, поэтому при чтении из файла считывайте построчно