我正在开发一个包含2列列表框的列表程序。两列都包含我希望保存为文件的字符串。只要可以在启动时再次读取并填充列表框,文件格式就无关紧要了。
非常感谢任何帮助!
答案 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;
}