将两列列表框的数据保存到文件中并加载
本文关键字:数据 存到文件 加载 列表 两列 | 更新日期: 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"));