本帖最后由 wulangxiong 于 2013-1-29 17:58 编辑
System.IO 还为我们提供了BinaryReader 和BinaryWriter 类用于按二进制模式读
写文件它们提供的一些读写方法是对称的比如针对不同的数据结构BinaryReader
提供了ReadByte ReadBoolean ReadInt ReadInt16 ReadDouble ReadString 等方法
而BinaryWriterz 则提供了WriteByte WriteBoolean WriteInt WriteInt16 WriteDouble
WriteString 方法
下面我们举一个通讯录的例子来说明BinaryReader 和BinaryWriter 类是如何使用
的。
using System; using System.IO; struct Record{ public
string name; public
UInt16 age; public
string phone; public
string address; };
//通讯录的记录格式 class
PhoneBook { FileStream
f_srm; string
s_filename; Record
m_record; public
PhoneBook(string filename) { s_filename
= filename; } public
int
Open() {
//显示初始化界面 Console.WriteLine("1: List Record"); Console.WriteLine("2: Add New Record"); Console.WriteLine("3: Erase Record"); Console.WriteLine("0: Exit"); int
i = Console.Read() -
'0'; return
i; } public
void
AddNew() {
//向通讯录中添加记录 try{ f_srm =
new
FileStream(s_filename,FileMode.OpenOrCreate); } catch { Console.WriteLine("PhoneBookError!"); return; } BinaryWriter pw =
new
BinaryWriter(f_srm); pw.Seek(0,SeekOrigin.End); string s_temp; Console.Write("Name:"); Console.ReadLine(); m_record.name = Console.ReadLine(); pw.WriteString(m_record.name); reenter: Console.Write("Age: "); s_temp = Console.ReadLine(); try{ m_record.age = s_temp.ToUInt16(); } catch { Console.WriteLine("The formatof age is error,please ReEnter"); goto
reenter; } pw.Write(m_record.age); Console.Write("PhoneNumber: "); m_record.phone = Console.ReadLine(); pw.WriteString(m_record.phone); Console.Write("Address:"); m_record.address = Console.ReadLine(); pw.WriteString(m_record.address); f_srm.Close(); } public
void
List() {
//浏览所有记录 try{ f_srm =
new
FileStream(s_filename,FileMode.Open); } catch { Console.WriteLine("PhoneBookError!"); return; } BinaryReader pr =
new
BinaryReader(f_srm); Console.WriteLine("Name AgePhone Number Address"); Console.WriteLine("***************************************"); while(true) { try{ m_record.name = pr.ReadString(); m_record.age = pr.ReadUInt16(); m_record.phone = pr.ReadString(); m_record.address = pr.ReadString(); } catch{return;} Console.WriteLine("{0,-9}{1,-6}{2,-18}{3}",m_record.name, m_record.age,m_record.phone,m_record.address); } f_srm.Close(); }
public
void
Erase() {
//清空所有记录
try{ f_srm =
new
FileStream(s_filename,FileMode.Create); }
catch { Console.WriteLine("PhoneBook Error!");
return; } f_srm.Close(); Console.WriteLine("Now the book is empty!"); } } class
Test { public
static
void
Main() { PhoneBook pbook =
new
PhoneBook("c:\\c#\\file\\Phone.book"); int
i = pbook.Open(); switch(i) { case
1: pbook.List(); break; case
2: pbook.AddNew(); break; case
3: pbook.Erase(); } } } }
其中有这么一条语句
Console.WriteLine("{0,-9}{1,-6}{2,-18}{3}",m_record.name,
m_record.age,m_record.phone,m_record.address);
它表示对输出进行格式化{} 中使用的第二个数表示输出占据的屏幕位数正
数表示从右边起计而负数表示从左边起计。 |