使用C#读物二进制文件的方法(源代码)

时间:2021-05-02

本文要介绍的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>publicclassStudent{///<summary>///学号变量///</summary>privateString_id;///<summary>///姓名变量///</summary>privateString_name;///<summary>///语文成绩变量///</summary>privateDouble_score1;///<summary>///数学成绩变量///</summary>privateDouble_score2;///<summary>///英语成绩变量///</summary>privateDouble_score3;///<summary>///学号属性///</summary>publicStringId{get{return_id;}set{_id=value;}}///<summary>///姓名属性///</summary>publicStringName{get{return_name;}set{_name=value;}}///<summary>///语文成绩属性///</summary>publicDoubleScore1{get{return_score1;}set{_score1=value;}}///<summary>///数学成绩属性///</summary>publicDoubleScore2{get{return_score2;}set{_score2=value;}}///<summary>///英语成绩属性///</summary>publicDoubleScore3{get{return_score3;}set{_score3=value;}}}

下面是我的读方法,读取文件中的信息到参数List<Student>stu中

///<summary>///读取信息方法///</summary>///<returns>读取是否成功</returns>publicvoidReadInfo(List<Student>stu){Console.WriteLine("请输入文件读取路径:(键入回车为默认路径)");Stringfilename=Console.ReadLine();FileStreamfs;//默认路径if(filename==""){fs=newFileStream("student.dll",FileMode.Open);}else{//如果文件不存在,就提示错误if(!File.Exists(filename)){Console.WriteLine("\n\t读取失败!\n错误原因:可能不存在此文件");return;}//否则创建文件fs=newFileStream(filename,FileMode.Open);}//使用二进制读取BinaryReaderbr=newBinaryReader(fs);Console.Write("读取信息将覆盖现有的信息,继续吗?y/n:");Stringcommand=Console.ReadLine();if(command=="y"||command=="Y"){for(inti=0;i<stu.Count;i++){stu.RemoveAt(i);}//从磁盘上读取信息try{while(true){Studentstudent=newStudent();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>publicvoidWriteInfo(List<Student>stu){Console.WriteLine("请输入文件保存路径:(键入回车为默认路径)");FileStreamfs;Stringfilename=Console.ReadLine();//默认路径if(filename==""){fs=newFileStream("student.dll",FileMode.Create);}//手动输入路径else{//如果文件存在,就提示错误if(File.Exists(filename)){Console.WriteLine("\n\t保存失败!\n错误原因:可能存在相同文件");return;}//否则创建文件fs=newFileStream(filename,FileMode.Create);}//数据保存到磁盘中BinaryWriterbw=newBinaryWriter(fs);foreach(Studentstudentinstu){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("保存成功!");}本文源自:翔宇亭——IT乐园(http://),转载请保留此信息!

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章