C#按二进制模式读写文件 - 喵宅苑(1号机) | 重启中... 有可爱的男孩子
作者:wulangxiong
本帖最后由 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【链接登录后可见】 { 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【链接登录后可见】{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); 它表示对输出进行格式化{} 中使用的第二个数表示输出占据的屏幕位数正 数表示从右边起计而负数表示从左边起计。作者:Q_Lucky
好帖是顶出来滴!查看回复