程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#讀寫文件的方法(2)

C#讀寫文件的方法(2)

編輯:關於C語言

17.3.2 按二進制模式讀寫

System.IO還為我們提供了BinaryReader和BinaryWriter類,用於按二進制模式讀寫文件。它們提供的一些讀寫方法是對稱的,比如針對不同的數據結構,BinaryReader提供了ReadByte,ReadBoolean,ReadInt,ReadInt16,ReadDouble,ReadString等方法,而BinaryWriter則提供了WriteByte,WriteBoolean,WriteInt,WriteInt16,WriteDouble,WriteString方法。

下面我們舉一個通訊錄的例子來說明BinaryReader和BinaryWriter類是如何使用的。

程序清單17-7:

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("PhoneBook Error!");
   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 format of age is error,please ReEnter");
   goto reenter;
  }
  pw.Write(m_record.age);
  Console.Write("Phone Number:");
  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("PhoneBook Error!");
    return;
   }
   BinaryReader pr=new BinaryReader(f_srm);
   Console.WriteLine("Name   Age  Phone 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#\\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);

它表示對輸出進行格式化。“{}”中使用的第二個數表示輸出占據的屏幕位數。正數表示從右邊起計,而負數表示從左邊起計。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved