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

本文关键字:数据 存到文件 加载 列表 两列 | 更新日期: 2023-09-27 17:59:04

我正在开发一个包含两列列表框的列表程序。这两列都包含我希望保存为文件的字符串。文件格式其实并不重要,只要它可以在启动时被读取并再次填充列表框即可。

任何帮助都将不胜感激!

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

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

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的内容保存到磁盘,这样用户就可以用自己的项定义它。

首先,数据的显示和您使用的gui小部件是完全无关的(即,您使用的是"2列列表框"并不重要)。相关的(在列表框的情况下)是绑定到列表框的对象集合。

collection类实际上是这里加载&节省物它的内容是您将要保存和从文件中加载的内容。显示数据的列表框并不在意;它只是使用您设置的任何模板显示绑定到的集合的数据。

那么如何加载&保存你的请求?下面是一个使用二进制格式的简单示例。Intertubes上还有无数其他的步行画眉鸟;只需谷歌"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;
    }

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