我有一个SortedList,键是Contact.name,值是一个对象,Contact。我正在将这个列表写入一个文件,使用BinaryWriter并且我没有任何问题,但现在我想阅读这个列表,之后,寻找一个特定的联系人。我不知道该怎么做。我认为我必须读取文件,然后查找联系人,但是如何用文件中保存的二进制代码填充SortedList?
答案 0 :(得分:1)
听起来你想要BinaryReader
,它会从BinaryWriter
获取文件输出并反序列化为原始类型。
答案 1 :(得分:1)
这是一个关于如何从二进制文件中读取和写入的快速示例。
static void Main(string[] args)
{
WriteContacts(new List<Contact>( new []{ new Contact { ID = 1, Name = "Juan", Age = 34 }, new Contact { Name = "Pedro", Age = 23, ID = 2 } }));
FindContactInFile("Juan");
FindContactInFile("Mario");
Console.ReadKey();
}
private static void FindContactInFile(string name)
{
IFormatter formatter = new BinaryFormatter();
using (Stream s = new FileStream("contacts.bin", FileMode.Open, FileAccess.Read, FileShare.Read))
{
var contacts = (List<Contact>)formatter.Deserialize(s);
var person = contacts.Where(x=>x.Name==name).FirstOrDefault();
if (person != null)
Console.WriteLine("Persona encontrada: {0}", person.Name);
else
Console.WriteLine("{0} no fue encontrado en el archivo.", name);
}
}
private static void WriteContacts(List<Contact> contacts)
{
IFormatter formatter = new BinaryFormatter();
using (Stream s = new FileStream("contacts.bin", FileMode.Create, FileAccess.Write, FileShare.None))
{
formatter.Serialize(s, contacts);
}
}
}
[Serializable]
class Contact
{
public int ID { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
在那里可以改进很多东西,比如每次搜索某人时都不会读取整个文件。或者不是一次性读取整个文件...在任何情况下,这里的关键概念是,为了将内容存储在二进制文件中,您需要序列化对象。为此,您可以使用.NET提供的BinaryFormatters之一(如上所述)并从文件中读回,您只需执行相反的操作。