时间: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邮箱联系删除。
C#进制转换(二进制、十六进制、十进制互转) 由于二进制数在C#中无法直接表示,所以所有二进制数都用一个字符串来表示 例如:二进制:1010表示为字符串
MariaDB数据库分为源代码版本和二进制版本,源代码版本需要cmake编译,这里是二进制版本的安装#tarzxvfmariadb-5.5.31-linux-x
rpm执行安装包二进制包(Binary)以及源代码包(Source)两种。二进制包可以直接安装在计算机中,而源代码包将会由RPM自动编译、安装。源代码包经常以s
由于二进制数在C#中无法直接表示,所以所有二进制数都用一个字符串来表示例如:二进制:1010表示为字符串:"1010"intd=10;//十进制转二进制字符串C
用C#处理二进制文件用C#处理二进制文件的话,就会有另外两项新的挑战。第一项挑战是:所有的.NET语言都是强类型的。因此,你不得不从文件中的字节流转换为你所想要