2011-06-30 149 views
0

我正在使用序列化来写入将一些联系人的姓名和电话追加到文件中,我通过将每个联系人附加到文件来单独编写每个联系人。我怎么知道流是结束?

我想从文件中读取这些联系人并将它们放入ListView中。

Stream stream = File.Open("Contacts.dat", FileMode.Open); 
BinaryFormatter BFormatter = new BinaryFormatter(); 
Contacts contact = (Contacts)BFormatter.Deserialize(stream); 
listView1.Items.Add(new ListViewItem(new string[] { "", contact.name, contact.phone })); 

我做上面的代码我只得到一个接触,如果我再反序列化流我得到的下一次接触

Contacts contact2 = (Contacts)BFormatter.Deserialize(stream); 
listView1.Items.Add(new ListViewItem(new string[] { "", contact2.name, contact2.phone})); 

我如何可以读取所有联系人后? 或我怎么知道流是结束?

+1

我建议你BFormatter类的文档看。这个班级不是.net的一部分 –

+0

为什么他的班级与这个问题有关? – jgauffin

+1

因为Deserialize方法从流中获取数据,所以它是相关的。这应该告诉他他需要如何退出一个能够从流中获取所有联系人的循环。 –

回答

0

您可以检查流Position财产免遭流Length财产,假设你是指的文件流

+0

谢谢Ankur ...它的作品 – Sayed

+0

但是当我打开文件时,我可以看到数据?! 我不希望用户能够读取数据......我该怎么做? – Sayed

0

这取决于它是哪种类型的流。例如,NetworkStream永远不会结束(因为TCP是基于流的)。当Read返回0字节时,FileStream将结束。

+0

StreamReader有它自己的方法StreamReader.EndOfStream(); – Burimi

+0

@Cody:这只是流的包装,并使用流来检测结束。 – jgauffin

+0

不,我不能在序列化中使用StreamReader ..我可以吗? – Sayed