将两列列表框的数据保存到文件并加载它

时间:2011-06-10 17:04:58

标签: c# listbox

我正在开发一个包含2列列表框的列表程序。两列都包含我希望保存为文件的字符串。只要可以在启动时再次读取并填充列表框,文件格式就无关紧要了。

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:1)

查看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"));

答案 1 :(得分:1)

您可以从自定义对象填充列表框并将该对象序列化为磁盘:

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的内容保存到磁盘,以便用户能够使用自己的项目定义它。

答案 2 :(得分:1)

首先,显示您的数据以及您使用的gui小部件是完全不相关的(即您使用“2列列表框”无关紧要)。相关的(在列表框的这种情况下)是绑定到列表框的对象的集合。

对于加载和收集而言,集合类实际上是重要的元素。保存。它的内容是您将从文件中保存和加载的内容。显示数据的列表框不关心;它只是使用你设置的任何模板显示它所绑定的集合的数据。

那你怎么加载&除了你问?这是一个使用二进制格式的简单示例。 Intertubes上有许多其他的walkthrus;只是google“C#Serialization to file”

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