C#本地讀寫二進位檔案

來源:互聯網
上載者:User

標籤:style   blog   http   color   使用   檔案   

本文要介紹的C#本地讀寫二進位檔案,二進位檔案指儲存在物理磁碟的一個檔案。

第一步:讀寫檔案轉成流對象。其實就是讀寫檔案流 (FileStream對象,在System.IO命名空間中)。File、FileInfo、FileStream這三個類可以將開啟檔案,並變成檔案 流。下面是引用微軟對File、FileInfo、FileStream的介紹
System.IO.File類 提供用於建立、複製、刪除、移動和開啟檔案的靜態方法,並協助建立 FileStream 對象。
System.IO.FileInfo類 提供建立、複製、刪除、移動和開啟檔案的執行個體方法,並且協助建立 FileStream 對象。無法繼承此類。
System.IO.FileStream類 公開以檔案為主的 Stream,既支援同步讀寫操作,也支援非同步讀寫操作。
我直接使用 FileStream,他繼承於Stream

第二步:讀寫流。讀寫二進位檔案用System.IO.BinaryReader和System.IO.BinaryWriter類;讀寫文字檔用System.IO.TextReader和System.IO.TextWriter類。下面是我的實體 (即要保持到檔案的資料)

  /// <summary>
 /// 學生基本資料類
 /// </summary>
 public class Student
 {
  /// <summary>
  /// 學號變數
  /// </summary>
  private String _id;
  /// <summary>
  /// 姓名變數
  /// </summary>
  private String _name;
  /// <summary>
  /// 語文成績變數
  /// </summary>
  private Double _score1;
  /// <summary>
  /// 數學成績變數
  /// </summary>
  private Double _score2;
  /// <summary>
  /// 英語成績變數
  /// </summary>
  private Double _score3;


  /// <summary>
  /// 學號屬性
  /// </summary>
  public String Id
  {
   get { return _id; }
   set { _id = value; }
  }
  /// <summary>
  /// 姓名屬性
  /// </summary>
  public String Name
  {
   get { return _name; }
   set { _name = value; }
  }
  /// <summary>
  /// 語文成績屬性
  /// </summary>
  public Double Score1
  {
   get { return _score1; }
   set { _score1 = value; }
  }
  /// <summary>
  /// 數學成績屬性
  /// </summary>
  public Double Score2
  {
   get { return _score2; }
   set { _score2 = value; }
  }
  /// <summary>
  /// 英語成績屬性
  /// </summary>
  public Double Score3
  {
   get { return _score3; }
   set { _score3 = value; }
  }
 }

 下面是我的讀方法,讀取檔案中的資訊到參數List<Student> stu中  

  /// <summary>
  /// 讀取資訊方法
  /// </summary>
  /// <returns>讀取是否成功</returns>
  public void ReadInfo(List<Student> stu)
  {
   Console.WriteLine("請輸入檔案讀取路徑:(鍵入斷行符號為預設路徑)");
   String filename = Console.ReadLine();
   FileStream fs;
   //預設路徑
   if (filename == "")
   {
    fs = new FileStream("student.dll", FileMode.Open);
   }
   else
   {
    //如果檔案不存在,就提示錯誤
    if (!File.Exists(filename))
    {
     Console.WriteLine("\n\t讀取失敗!\n錯誤原因:可能不存在此檔案");
     return;
    }
    //否則建立檔案
    fs = new FileStream(filename, FileMode.Open);
   }
   //使用二進位讀取
   BinaryReader br = new BinaryReader(fs);
   Console.Write("讀取資訊將覆蓋現有的資訊,繼續嗎?y/n :");
   String command = Console.ReadLine();
   if (command == "y" || command == "Y")
   {
    for (int i = 0; i < stu.Count; i++)
    {
     stu.RemoveAt(i);
    }
    //從磁碟上讀取資訊
    try
    {
     while (true)
     {
      Student student = new Student();
      student.Id = br.ReadString();
      student.Name = br.ReadString();
      student.Score1 = br.ReadDouble();
      student.Score2 = br.ReadDouble();
      student.Score3 = br.ReadDouble();
      stu.Add(student);
      student = null;
     }
    }
    catch (Exception)
    {
     Console.WriteLine("\n\n讀取結束!");
    }
   }
   br.Close();
   fs.Close();
  }


下面是我的寫入方法,寫入參數List<Student> stu中的資料


  /// <summary>
  /// 寫入資訊方法
  /// </summary>
  /// <returns>寫入是否成功</returns>
  public void WriteInfo(List<Student> stu)
  {
   Console.WriteLine("請輸入檔案儲存路徑:(鍵入斷行符號為預設路徑)");
   FileStream fs;
   String filename = Console.ReadLine();
   //預設路徑
   if (filename == "")
   {
    fs = new FileStream("student.dll", FileMode.Create);
   }
   //手動輸入路徑
   else
   {
    //如果檔案存在,就提示錯誤
    if (File.Exists(filename))
    {
     Console.WriteLine("\n\t儲存失敗!\n錯誤原因:可能存在相同檔案");
     return;
    }
    //否則建立檔案
    fs = new FileStream(filename, FileMode.Create);
   }
   //資料儲存到磁碟中
   BinaryWriter bw = new BinaryWriter(fs);
   foreach (Student student in stu)
   {
    bw.Write((String)student.Id);
    bw.Write((String)student.Name);
    bw.Write((Double)student.Score1);
    bw.Write((Double)student.Score2);
    bw.Write((Double)student.Score3);
    bw.Flush();
   }
   bw.Close();
   fs.Close();
   Console.WriteLine("儲存成功!");
  }轉載:http://www.cnblogs.com/top5/archive/2011/02/07/1949675.html
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.