Сохраните данные из двухколоночного списка в файл и загрузите его - PullRequest
0 голосов
/ 10 июня 2011

Я работаю над программой списка, которая содержит список из 2 столбцов. Оба столбца содержат строки, которые я хочу сохранить в виде файла. Формат файла на самом деле не имеет значения, если его можно прочитать и снова заполнить список при запуске.

Любая помощь будет чрезвычайно ценится!

Ответы [ 3 ]

1 голос
/ 10 июня 2011

Вы можете заполнить список из пользовательского объекта и сериализовать этот объект на диск:

using System;
using System.IO;
using System.Xml;
using System.Xml.Serialization;
using System.Collections.Generic;
using System.Windows.Forms;


//Serialize an object to disk (properties must be public):

public string Serialize(Object Input, string OutFile)
{
    System.IO.MemoryStream memoryStream = new System.IO.MemoryStream();

    XmlSerializer XML = new XmlSerializer(Input.GetType());
    XML.Serialize(memoryStream, Input);

    memoryStream.Flush();
    memoryStream.Position = 0;

    if (!string.IsNullOrEmpty(OutFile))
    {
        using (FileStream fileStream = new FileStream(OutFile, FileMode.Create))
        {
            byte[] data = memoryStream.ToArray();
            fileStream.Write(data, 0, data.Length);
            fileStream.Close();
        }
    }

    return new System.IO.StreamReader(memoryStream).ReadToEnd();
}


//Deserialize from a serialized file:

    public object DeserializeFile(Type ObjectType, string FileName)
{
    Type type = typeof(object);

    if (ObjectType != null)
    { type = ObjectType; }

    using (FileStream fileStream = new FileStream(FileName, FileMode.Open, FileAccess.Read))
    {
        StreamReader sr = new StreamReader(fileStream);
        string XML = sr.ReadToEnd();

        XmlSerializer xmlSerializer = new System.Xml.Serialization.XmlSerializer(type);
        fileStream.Close();

        return xmlSerializer.Deserialize(new StringReader(XML));
    }
}

CustomObject co = DeserializeFile(typeof(CustomObject), fileName.xml) as CustomObject;

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

1 голос
/ 10 июня 2011

Во-первых, отображение ваших данных и используемых вами графических виджетов совершенно не имеет значения (т. Е. То, что вы используете «список из 2 столбцов», не имеет значения). Что важно (в данном случае со списком) - это набор объектов, привязанный к вашему списку.

Класс коллекции - действительно важный элемент для загрузки и сохранения. Его содержимое - это то, что вы будете сохранять и загружать из вашего файла. Список, отображающий данные, не имеет значения; он просто отображает данные коллекции, к которой он привязан, используя любой шаблон, который вы настроили.

Так как вы загружаете и сохраняете, вы спрашиваете? Вот простой пример, который использует двоичное форматирование. На Intertubes есть еще один миллиард пешеходов; просто Google "C # Сериализация в файл"

   public void Serialize(string filename, ObjectToSerialize objectToSerialize)
    {
       Stream stream = File.Open(filename, FileMode.Create);
       BinaryFormatter bFormatter = new BinaryFormatter();
       bFormatter.Serialize(stream, objectToSerialize);
       stream.Close();
    }

   public ObjectToSerialize DeSerialize(string filename)
    {
       ObjectToSerialize objectToSerialize;
       Stream stream = File.Open(filename, FileMode.Open);
       BinaryFormatter bFormatter = new BinaryFormatter();
       objectToSerialize = (ObjectToSerialize)bFormatter.Deserialize(stream);
       stream.Close();
       return objectToSerialize;
    }
1 голос
/ 10 июня 2011

Посмотрите на классы StreamReader и StreamWriter.

Для сохранения содержимого списка:

   using (StreamWriter tWrite = new StreamWriter(@"c:\temp\test.txt"))
    {
      foreach (string tItem in listBox1.Items)
      {
        tWrite.WriteLine(tItem);
      }
    }

Для чтения содержимого файла:

listBox1.Items.AddRange(File.ReadAllLines(@"c:\temp\test.txt"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...