控件中国网现已改版,您看到的是老版本网站的镜像,系统正在为您跳转到新网站首页,请稍候.......
中国最专业的商业控件资讯网产品咨询电话:023-67870900 023-67871946
产品咨询EMAIL:SALES@COMPONENTCN.COM

C#读写二进制文件

作者:佚名 出处:互联网 2011年02月10日 阅读:

C#读写二进制文件

本文要介绍的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("保存成功!");
  }

热推产品

  • ActiveReport... 强大的.NET报表设计、浏览、打印、转换控件,可以同时用于WindowsForms谀坔攀戀Forms平台下......
  • AnyChart AnyChart使你可以创建出绚丽的交互式的Flash和HTML5的图表和仪表控件。可以用于仪表盘的创......
首页 | 新闻中心 | 产品中心 | 技术文档 | 友情连接 | 关于磐岩 | 技术支持中心 | 联系我们 | 帮助中心 Copyright-2006 ComponentCN.com all rights reserved.重庆磐岩科技有限公司(控件中国网) 版权所有 电话:023 - 67870900 传真:023 - 67870270 产品咨询:sales@componentcn.com 渝ICP备12000264号 法律顾问:元炳律师事务所 重庆市江北区塔坪36号维丰创意绿苑A座28-5 邮编:400020
在线客服
在线客服系统
在线客服
在线客服系统