精华内容
下载资源
问答
  • C#读写二进制文件

    2016-07-25 16:53:41
    C#读写二进制文件   本文要介绍的C#本地读写二进制文件,二进制文件指保存在物理磁盘的一个文件。 第一步:读写文件转成流对象。其实就是读写文件流 (FileStream对象,在System.IO命名空间中)。File...

    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.BinaryReaderSystem.IO.BinaryWriter类;读写文本文件用System.IO.TextReaderSystem.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<Studentstu中  

      ///   <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  0; 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( "保存成功!" );
      }
    分类: asp.net,C#
    1
    0
    (请您对文章做出评价)
    « 上一篇: WinHex的两则另类用法
    » 下一篇: C#读写文件总结
    posted @ 2011-02-07 16:41 与时俱进 阅读( 24488) 评论( 0) 编辑 收藏
     
    展开全文
  • public class FileApp { public static void Main() { // 在当前目录创建一个文件myfile.txt,对该文件具有读写权限 FileStream fsMyfile = new FileStream(“myfile.txt” , FileMode.Create, FileAccess.Read...
  • c#读取二进制文件

    千次阅读 2018-05-04 18:22:11
     在做项目的时候需要用C#读取一个二进制文件。先说一下这个文件是怎么存的?文件的内容是有c++种的结构体存入的,因此,我们在读文件的时候需要将其解析成结构体,然后在进行读取。 结构体如下:[StructLayout...

                一晃又好长时间没写博客了,今天总结一下近期的收获。

               

               在做项目的时候需要用C#读取一个二进制文件。先说一下这个文件是怎么存的?文件的内容是有c++种的结构体存入的,因此,我们在读文件的时候需要将其解析成结构体,然后在进行读取。

            结构体如下:

    [StructLayout(LayoutKind.Sequential, Pack = 1)]         //c#中数组长度与c中相同
    public struct JOBStepTemplate_Head                      //c中该结构体长度为20,c#中为32
    {
        public char IN_CASS;            
        public char OUT_CASS;           
        public char START_SLOT;         
        public char END_SLOT;           
        public int METHOD_COUNT;            
        public char EDIT_TYPE;             
        public char PROGRESS;          
        public char DIRECTORY_TYPE;     
        public long DIRECTORY_DATE;    
        public char STATUS_SAVE;          
    }

    在解析上面结构体时,我们发现c#中的结构体和c中的结构体长度不一样,因此加入

    [StructLayout(LayoutKind.Sequential, Pack = 1)],这句话保证了c#和c的结构体是等长的。

    FileStream fs;
    BinaryReader br;
    string filename = @"D:\Project\jobhistroy\CTC\Scheduler\lotlog\Job_list.dat";           //路径
    if (!File.Exists(filename))
    {
         MessageBox.Show("Job_list文件不存在", "提示", MessageBoxButtons.YesNoCancel);
    }
    
    fs = new FileStream(filename, FileMode.Open);           //获取流对象
    br = new BinaryReader(fs);                              //二进制读取
    br.Read(buffer, 0, 14);                                 //读取头

    上面这段代码是保存路径,以及创建流对象。因为项目中二进制文件会有一个头,长度为14,因此,最后一行将头读取。这个可以用来做判断,也就是说,如果有多个类似的二进制文件的话,可以用这个头来进行区分。



     byte[] JOB_DATA = new byte[size];             //存放工作数据
     br.Read(JOB_DATA, 0, size); 
    // ===================================================将内容读取到byte数组中
    
     IntPtr structPtr = Marshal.AllocHGlobal(size);      //分配结构体大小的内存空间   
     Marshal.Copy(JOB_DATA, 0, structPtr, size);         //将byte数组拷到分配好的内存空间    
     JOBS_Head[JOBCOUNT] = (JOBStepTemplate_Head)Marshal.PtrToStructure(structPtr, typeof(JOBStepTemplate_Head));       //将内存空间转换为目标结构体    
     Marshal.FreeHGlobal(structPtr);                     //释放内存空间    
    
     //====================================================

    上面代码中,size是结构体的长度

    JOBStepTemplate_Head job = new JOBStepTemplate_Head();
    int size = Marshal.SizeOf(job);
    这样就搞定了。JOB_DATA是一个二进制数组,用来保存从文件中读出的size个字节。下面是将读出的size个字节转换成结构体。

    从二进制文件读数据到结构体应该就这些,没有什么。由于项目原因,代码不好全不粘贴上,只写部分核心代码。



    展开全文
  • c#图片二进制互转

    2021-09-10 15:18:19
    ///二进制转图片 MemoryStream ms = new MemoryStream(byte[] 二进制数据); /// 图片转二进制 FileStream fs = new FileStream(path, FileMode.Open); BinaryReader br = new BinaryReader(fs); byImage = br....

    ///二进制转图片
    MemoryStream ms = new MemoryStream(byte[] 二进制数据);
    /// 图片转二进制
    FileStream fs = new FileStream(path, FileMode.Open);
    BinaryReader br = new BinaryReader(fs);
    byImage = br.ReadBytes(Convert.ToInt32(br.BaseStream.Length));
    fs.Close();
    br.Close();
    ///数据存储类型为
    varbinary(MAX)

    展开全文
  •  完整代码: 代码如下:namespace BinaryStreamApp { class Program { static void Main(string[] args) { //为文件打开一个二进制写入器 FileStream fs; fs = new FileStream(“C:\\BinFile.dat”, File...
  • C#读取二进制文件【float型】

    千次阅读 2017-12-28 15:13:10
    今天需要用C#读取二进制文件,文件里面存储的全是float类型的小数。 由于接口比较隐蔽,所以就记录一下。 FileStream fs; fs = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.Read); ...

    今天需要用C#读取二进制文件,文件里面存储的全是float类型的小数。
    由于接口比较隐蔽,所以就记录一下。

                FileStream fs;
                fs = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.Read);
                BinaryReader br = new BinaryReader(fs);          
                float c = br.ReadSingle();
    
    

    接口说明:
    这里写图片描述

    展开全文
  • C++与c#读取二进制文件对比

    千次阅读 2013-03-12 18:27:28
    一种C#读写二进制文件的通用方法 在日常的工作中,我们经常需要进行一些二进制文件或协议的读写操作,用C#解析二进制文件常常是一件比较麻烦且容易出错的工作,本文介绍了一种在C#中实现快速读写二进制文件通用的...
  • C#读写二进制存档文件 以仙剑奇侠传三为例,读取配置文件数据
  • C#二进制序列化

    2019-09-25 19:55:09
    一般有三种方式:1、是使用BinaryFormatter进行串行化二进制序列化;2、使用XmlSerializer进行串行化的XML序列化;3、使用SOAP协议进行序列化。这里先总结二进制序列化。 命名空间: Syste...
  • C#二进制字符串保存到本地

    千次阅读 2014-03-07 09:24:08
    #region 将文件保存到本地 /// /// 将文件保存到本地 /// /// 文件的二进制数据字符串 /// 文件名称,必须带后缀 private void SaveFile(string psContent, string psFileName) {
  • C# 读写二进制文件

    2019-08-30 08:56:14
    BinaryWriter bw; BinaryReader br; try { bw = new BinaryWriter(new FileStream("mydata", FileMode.Create)); }...
  • C#二进制文件操作

    2010-06-04 13:09:00
    C#二进制文件操作 原帖:http://www.blogjava.net/blogpig/archive/2006/10/24/76910.html 1 .数值应保存在二进制文件 首先列举文本、二进制文件的操作(读写)方法: 方式 1 : // 文本...
  • C#二进制序列化DataSet对象

    千次阅读 2014-05-11 11:11:34
    为了以二进制序列化DataSet,只
  • C# 写入二进制文件

    2018-09-06 14:30:00
    写入整型25 文件在MiniHex中显示 19 00 00 00 写入字符串I am happy ...49 20 61 6D 20 68 61-70 70 79 这一行数据是C#把字符串转换为16进制形式 不知道为啥用MiniHex打开多了个0A 写入空"" 00 在...
  • c#二进制文件

    2019-10-28 13:23:45
    br = new BinaryReader(new FileStream(fileName, FileMode.Open)); } catch (IOException e) //文件打开失败 { Console.WriteLine(e.Message + "\n Cannot create file."); return; } FileInfo f = new ...
  • C#读取二进制文件入数据库

    千次阅读 2010-06-18 21:35:00
    C#读取二进制文件入数据库2009-05-26 17:37 本来我对文件操作不是很了解,以前只做了数据导出到excel表格的文件操作,是数据导出的,虽说数据导出和数据导入只是个相反的过程,也没什么难的,但是在实际...
  • c# 图片二进制存放

    千次阅读 2013-07-23 10:03:42
    朋友们,我喜欢给园子的朋友来来些简单实用的...看到标题,二进制形式的文件是很广的。这里我主要谈谈图片以二进制形式的数据读取和存储。 .Net下图片的常见存储与读取凡是有以下几种: 存储图片:以二进制的形式存储图
  • C#写入二进制数据

    2018-02-12 10:44:35
    FileStream f = new FileStream( "a.bat" , FileMode.OpenOrCreate, FileAccess.ReadWrite); for ( int i = 0 ; i 10 ;i++ ) { f.WriteByte((byte)i); //调用WriteByte将字节写入到文件里面 } f....
  • c#读写二进制

    2012-08-03 00:40:18
     //修改二进制内容  Random r = new Random();  for (int i = 0; i ; i++) {  var rint = r.Next(0, 4);  bits[i] |= bits[rint];  }  //写入文件  bw.Write(bits);  //关闭流  bw....
  • 在网上寻找的方法,可以实现把数据库中的二进制数据转换成文件,也可以把本地的文件转成二进制的数据。二进制的图片数据可以用response对象直接输出给浏览器,比较方便~ 话不多说,代码送上! /// <summary> /...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,133
精华内容 2,453
热门标签
关键字:

c#filestream二进制

c# 订阅