2013-02-28 79 views
1

我有一個SortedList,關鍵是Contact.name和值,是一個對象,Contact。我將這個列表寫入一個文件,BinaryWriter和我沒有任何麻煩,但現在我想讀這個列表,之後,尋找一個特定的聯繫人。我不知道該怎麼做。我認爲我必須閱讀文件,然後查找聯繫人,但是如何使用保存在文件中的二進制代碼填充SortedList?如何從文件中讀取SortedList?

+0

這聽起來像一本詞典,你有任何代碼? – Derek 2013-02-28 16:22:34

+0

這是一個帶有電話號碼,地址的PDA ... – Lindsay 2013-02-28 16:26:12

回答

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之一(如上所述)並從文件中讀回,您只需做相反的事情。