System.IO 提供 BinaryReader/BinaryWriter 進行二進制讀寫,方法對稱:
ReadByte, ReadBoolean, ReadInt32, ReadInt16, ReadDouble, ReadStringWriteByte, WriteBoolean, WriteInt32, WriteInt16, WriteDouble, WriteString以通訊錄範例示範:
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() { /* 顯示選單 */ }
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);
// 讀取輸入並寫入各欄位...
pw.WriteString(m_record.name);
pw.Write(m_record.age);
pw.WriteString(m_record.phone);
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");
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() { /* 清空檔案 */ }
}
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(); break; }
}
}
格式化輸出 {0,-9} 表示左對齊佔 9 字元,正數為右對齊。